ЧаВо

Предыдущая  Содержание  Следующая  V*D*V

В интернете встречаются разные предложения по решению проблемы:

Поместить буфера TX во внутреннюю SRAM (CONFIG_MACB_TX_SRAM)

Изменить начальную настройку bus-matrix: EMACB с высоким приоритетом на SRAM & EBI (SDRAM)

Уменьшить скорость интерфейса Ethernet, например, так:
ethtool -s eth0 speed 10 autoneg off

 

В строке запуска Linux указать раздел для mmc/sd карты: root=/dev/mmcblk0p1(2,3,...) или для usb: root=/dev/sda1

Установить задержку подключения rootdelay=10

 

Опции MTD ядра:

CONFIG_MTD=y

CONFIG_MTD_PARTITIONS=y

CONFIG_MTD_CMDLINE_PARTS=y

CONFIG_MTD_CHAR=y

CONFIG_MTD_BLKDEVS=y

CONFIG_MTD_BLOCK=y

CONFIG_MTD_MAP_BANK_WIDTH_1=y

CONFIG_MTD_MAP_BANK_WIDTH_2=y

CONFIG_MTD_MAP_BANK_WIDTH_4=y

CONFIG_MTD_CFI_I1=y

CONFIG_MTD_CFI_I2=y

# Self-contained MTD device drivers

CONFIG_MTD_DATAFLASH=y

CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y

 

Командная строка Linux для подключения как корневой файловой системы:

rootwait root=/dev/mmcblk0p1(2,3...) mtdparts=spi0.0-AT45DB321x:<размер в байтах>@<смещение в байтах>(имя_раздела)

 

Размер и смещение должны быть кратны размеру страницы! Для AT45DB321 размер страницы 528 байт.

В ядре проверить аrch/arm/mach-at91/board-sam9260-ek.c, список spi устройств static struct spi_board_info ek_spi_devices[].

 

1-ый способ:

Создать файловую систему;

Запаковать ее в файл с помощью gzip;

Перед стартом ядра копировать образ в память;

В строке запуска Linux указать раздел: root=/dev/ram0 rw initd=стартовый адрес.

 

2-ой способ:

Создать файловую систему;

В файловой системе в корне создать скрипт запуска init или ссылку init на /sbin/init;

Включить в ядре поддержку initramfs
General setup  --->
   [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support

Указать путь к файловой системе и собрать ядро.

 

Посмотреть структуру существующего initramfs:

mkdir /tmp/initramfs

cd /tmp/initramfs

gunzip -c -9 /boot/initrd.img | cpio -i -d -H newc --no-absolute-filenames

 

Запаковать обратно изменённый:

cd /tmp/initramfs

find . | cpio -o -H newc | gzip -9 > /boot/initrd.img

 

/proc/cmdline

 

http://www.gsp.com/cgi-bin/man.cgi?section=5&topic=ntp.conf#24

Секция Reference Clock Commands.

В конфиг NTP сервера добавить:

server 127.127.1.1

fudge 127.127.1.1 stratum 10

 

Используем socat как местный прокси и пропускаем трафик через него.

Пример для smtp:

socat -v TCP-LISTEN:2025 TCP:smtp.mail.ru:25 &

 

http://kerneltrap.org/node/2199

Используйте 'cat /proc/bus/input/devices' и 'dmesg'. Первая перечисляет все устройства, известные ядру ввода с их параметрами, а вторая показывает сообщения запуска. Они могут показать ошибки, которые произошли во время процесса проверки.

 

http://forum.sparkfun.com/viewtopic.php?p=52483&sid=7e96cab25f81c8a55946e881bd905b03

#include <stdio.h>

#include <unistd.h>

#include <fcntl.h>

#include <sys/mman.h>

#define GPIO_BASE 0x80840000

/* GPIO memory mapped registers */

volatile unsigned int *PEDR;

volatile unsigned int *PEDDR;

 

int main (void)

{

 //long delay=128000, delay2=100;

 unsigned char *gpio;

 int fd;

 fd = open("/dev/mem", O_RDWR);

 if (fd < 0)

 {

         perror("Failed to open /dev/mem");

         return fd;

 }

 gpio = mmap(0, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, GPIO_BASE);

 

 PEDR = (unsigned int *)(gpio + 0x20);

 PEDDR = (unsigned int *)(gpio + 0x24);

 

 *PEDDR = 0xff;//set output

 *PEDR = 0x02;// turn ON Red LED (port E1)

 

 return 0;

}

также:

http://svn.arhuaco.org/svn/src/emqbit/tools/AT91-GPIO/user-space/

 

d = (d<<7)|((d<<5)&64)|((d<<3)&32)|((d<<1)&16)|((d>>1)&8)|((d>>3)&4)|((d>>5)&2)|(d>>7);

 

char conv[16] = {

0x00, 0x08, 0x04, 0x0C,

0x02, 0x0A, 0x06, 0x0E,

0x01, 0x09, 0x05, 0x0D,

0x03, 0x0B, 0x07, 0x0F};

d = conv[d >> 4] | (conv[d & 0xF] << 4);

 

Заменить имена функций init и exit на probe и remove (в конце добавить return 0; ):

 

//int __init my_init(void)

static int __init my_probe(struct platform_device *pdev)

{

    ...

}

 

//void __exit my_exit(void)

static int my_remove(struct platform_device *pdev)

{

    ...

    return 0;

}

 

Изменить функции probe и remove для получения данных из структуры входных данных pdev, если это необходимо. Заменить printk на dev_err, dev_info, dev_debug.

 

Добавить структуру драйвера платформы и написать функцию init, добавляющие устройство платформы и драйвер платформы, и exit, удаляющую их:

 

#define DRV_NAME "driver name"

 

static struct platform_driver my_driver = {

    .probe = my_probe,

    .remove = __devexit_p(my_remove),

    .driver = {

        .name = DRV_NAME,

    },

};

 

static struct platform_device my_device = {

    .name  = DRV_NAME,

    .id    = -1,

};

 

static int __init my_init(void)

{

    int err = platform_driver_register( &my_driver );

    if( !err )

    {

        err = platform_device_register( &my_device );

        if( err )

            platform_driver_unregister( &my_driver );

    }

    return err;

}

 

void __exit my_exit(void)

{

    platform_device_unregister( &my_device );

    platform_driver_unregister( &my_driver );

}

SCRIPTDIR=$(dirname $(readlink -f "$0"))

SCRIPTNAME=$(basename $(readlink -f "$0"))

или

LINK=`readlink -f "$0"`

SCRIPTDIR=$(dirname $LINK)

SCRIPTNAME=$(basename $LINK)

 

такое происходит, если в скрипте в качестве символа перевода строки используется \r\n вместо \n или/и в начале файла присутствуют невидимые символы кодировки, вставляемые текстовыми редакторами.

 

 

if( x < 0) { x += (1 << power2) - 1; }

x >>= power2;

 

Для чисел с фиксированной точкой и округлением (аналогично +0.5 для положительного и -0.5 для отрицательного):

 

x += 1 << (power2 - 1);

x >>= power2;

 

 

Предыдущая  Содержание  Следующая