реклама на сайте
подробности

 
 
> Как скомпилировать модуль ядра под AT91SAM9260
X-Shadow
сообщение Dec 2 2010, 22:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 31-08-06
Пользователь №: 19 988



Здравствуйте.
Имеется плата с AT91SAM9260. Требуется из линукса работать с SPI. Почитал вот эту тему: http://www.starterkit.ru/html/index.php?na...iew&id=8139

В итоге сделал как там и говорилось: включил поддержку spidev в ядре, подредактировал at91sam9260_devices.c сделав short enable_spi1 = 1.

Ядро загружается, есть строчка atmel_spi atmel_spi.1: Atmel SPI Controller at 0xfffcc000 (irq 13). В каталоге sys/devices есть spidev. В /dev устройств spi нет. Я так понял они должны появиться после запуска модуля.

Нашел пример модуля:

Код
#include <linux/spi/spi.h>

#include <mach/gpio.h>// at91 specific GPIO pins



#define SPI_1_SPEED 1*1000*1000

#define MYCHIP_CS_PIN AT91_PIN_PС5



static struct spi_board_info my_spi_device =

{

    .modalias       = "myspidev",// имя устройства

    .chip_select    = 2,// абстрактный номер микросхемы

    .bus_num        = 1,// номер шины

    .max_speed_hz   = SPI_1_SPEED,// максимальная скорость подключения

    .controller_data = (void *) MYCHIP_CS_PIN,// выбор кристалла

    .mode           = SPI_MODE_0,// режим работы SPI, поддерживаемый микросхемой

};



static int init_and_send_data(void)

{

    static struct spi_device* my_spi_ptr;
    int err;

    struct spi_master* spi = spi_busnum_to_master( my_spi_device.bus_num );

    if( spi == NULL )

    {

        printk("unable to get spi master %d\n", my_spi_device.bus_num);

        return -1;

    }



    my_spi_ptr = spi_new_device( spi, my_spi_device );

    if( my_spi_ptr == NULL )

    {

        printk("unable to create my spi device\n");

        return -1;

    }



    u8 reg[2];

    reg[0] = 0x00<<1;// адрес, обычно младший бит указывает режим чтение/запись

    reg[1] = 0x00;// данные

    spi_write( my_spi_ptr, reg, sizeof(reg) );



out:

    spi_unregister_device(spi_codec);

    return err;

}


Насколько я понял данный модуль при инициализации посылает по SPI1 по CS1 2 байта и выгружается.

Проблема возникла с компиляцией. Порылся в интернете но так и не нашел как компилировать модули к ядру с помощью codesourcery (может быть не там/плохо искал).

Собственно скачал Codesourcery for ARM GNU/Linux & IA32 GNU/Linux версии arm-2007q1-22. С помощью нее компилировал ядро, т.е она работает (компилировал не сам задавая значения а скачал пример сборки).

Создал файл myspidev.c. Попробовал откомпилировать так:

arm-none-linux-gnueabi-gcc -mcpu=arm926ej-s myspidev.c -o myspidev

Инклуды указал напрямую, т.е /usr/src/linux-2.6.27/include/linux/spi/spi.h иначе он не хотел их видеть.

В конечном итоге при попытке компиляции выводит множетсво ошибок как в самих инклудах так и в файле модуля.

Я в этом всем новичек и скорее всего делаю все не так как надо. Подскажите пожалуйста как именно нужно компилировать.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
X-Shadow
сообщение Dec 5 2010, 16:49
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 31-08-06
Пользователь №: 19 988



Почитал несколько тем на этот счет. (основная эта - http://www.starterkit.ru/html/index.php?na...ew&id=8139)
Я так понял проблема там заключалась в том что в файл board-sam9260ek.c не были внесены соответствующие строчки. После того как это сделали у них появилось устройство.

Но в там у людей был udev а у меня нет udev или mdev. Необходимо создать устройство вручную. Проблема в том что я не знаю минорный номер устройства SPI1 с CS1. Как мне можно его узнать?
Go to the top of the page
 
+Quote Post
sasamy
сообщение Dec 7 2010, 08:01
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



Цитата(X-Shadow @ Dec 5 2010, 19:49) *
Но в там у людей был udev а у меня нет udev или mdev. Необходимо создать устройство вручную. Проблема в том что я не знаю минорный номер устройства SPI1 с CS1. Как мне можно его узнать?


Начиная с версии ядра 2.6.35 ядру опять вернули возможность экспортировать файлы устройств в юзерсейс (напомню - раньше была devfs которую разработчики дружно раскритиковали и выбросили из ядра sm.gif правда сейчас это только на этапе загрузки делается а потом нужен hotplug агент для создания файлов устройств появляющихся динамически, но вам этого достаточно. В menuconfig эта опция нахоится тут
Device Drivers ---> Generic Driver Options --->
[*] Maintain a devtmpfs filesystem to mount at /dev
[*] Automount devtmpfs at /dev, after the kernel mounted the rootfs
Помоему это не работает если корневая ФС находится в initramfs.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 23:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016