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

 
 
> Как скомпилировать модуль ядра под 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



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

 


RSS Текстовая версия Сейчас: 27th June 2025 - 11:50
Рейтинг@Mail.ru


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