====== Linux™ ====== [[wp>linux|Linux™]] --- семейство UNIX-подобных ОС основанных на [[wp>linux_kernel|ядре Linux™]]. В США Linux™ является зарегистрированной торговой маркой, принадлежащей [[wp>Linus_Torvalds|Линусу Торвальдсу]]. ===== Ядро ===== Для получения сборки (образа) ядра необходимы: - Первый вариант: * Архив с исходными кодами ядра соответствующей версии с www.kernel.org * Патч или набор патчей - Или, второй вариант: * Копия git-репозитория полученная командой:\\ ''git clone <адрес-репозитория> <локальная-директория>'' - Установленный компилятор, ассемблер и линковщик (редактор связей) для целевой платформы - Установленные программы: ''make'', ''patch'', ''sed'', ''awk'' и др. ==== Наложение патча ==== - Распакуйте исходные коды ядра соответствующей версии в директорию с условным названием ''linux-kernel'':\\ ''tar xjf linux-kernel.tar.bz2''\\ или\\ ''tar xzf linux-kernel.tar.gz'' - Распакуйте файл патча ''kernel.patch''\\ ''gunzip kernel.patch.gz'' - Перейдите в директорию ''linux-kernel''\\ ''cd linux-kernel'' - Наложите патч\\ ''patch -p0 < ../kernel.patch'' Подразумевается, что файл патча ''kernel.patch'' располагается в той же директории, что и директория исходных кодов ядра ''linux-kernel''. Номер в параметре ''p'' может быть другим, см. документацию по утилите ''patch''. ==== Патчи ядра ==== === Для плат на основе EP93xx === {{filelist>linux/2.6.20/patch/*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} [[linux-ep93xx-old-patch|Более старые]] === Для плат на основе PXA270 === - Для Тион270 rev.2 и Тион-Про270 rev.2 (рекомендуется и для плат ранее чем rev.2)\\ [[git|Git]] репозиторий http://zao-zeo.ru/media/files/linux/linux-2.6.35.14.git - Для плат на основе PXA270 ранее чем rev.2: {{filelist>linux/2.6.22/patch/*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} [[linux-pxa270-old-patch|Более старые]] ==== Сборка ядра ==== - Установите переменные окружения\\ ''export ARCH=arm''\\ ''export CROSS_COMPILE=arm-linux-gnu-''\\ где ''arm-linux-gnu-'' --- префикс используемого инструментария - Перейдите в директорию исходных кодов ядра соответствующей версии и наложенными патчами\\ ''cd linux-kernel'' - Выберите //одну// из конфигураций по умолчанию * ''make tion_defconfig'' * ''make tion-pro1_defconfig'' * ''make tion-pro2_defconfig'' * ''make tion270_defconfig'' * ''make tion-pro270_defconfig'' - Если необходимо, выполните дальнейшую конфигурацию, для этого требуется установить пакет ''ncurses-dev''\\ ''make menuconfig'' - Выполните сборку\\ ''make'' Также см. [[u-boot#ядра|создание образа ядра для загрузчика U-Boot]] === Модули ядра === Модуль --- объектный код, который может быть добавлен к ядру во время работы (выполнения) для расширения функциональности. Например, драйвер устройства может быть включён в ядро или собран в виде модуля. Существуют как преимущества, так и недостатки использования модулей в ядре для встроенных систем. Собранные модули должны быть установлены в [[linux#корневая_файловая_система|КФС]] целевой платформы в директории ''/lib/modules//'', где '''' --- версия ядра. - Сборка модулей\\ ''make modules''\\ сборка модулей также выполняется при сборке ядра командой ''make'' - Для обработки файлов модулей программой ${CROSS_COMPILE}strip (уменьшения размеров файлов модулей) задать переменную окружения\\ '' export INSTALL_MOD_STRIP=1'' - Установка модулей в директорию ''''\\ ''export INSTALL_MOD_PATH=''\\ ''make modules_install'' Загрузка модуля (на целевой платформе) выполняется командами ''modprobe'' или ''insmod'', удаление --- ''rmmod'', отображение информации о модуле --- ''lsmod''. ==== Различные сборки ядра ==== Сборки выполнены с конфигурацией по умолчанию (''defconfig''). === Для плат на основе EP93xx === {{filelist>linux/2.6.20/image/*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} [[linux-ep93xx-old-patch|Более старые]] === Для плат на основе PXA270 === Для Тион270 и Тион-Про270 (**rev.2 и rev.1.x**):\\ :!: Для ядра 2.6.35 используется [[u-boot#идентификатор_ядра|идентификатор machid]] e66 (шестнадцатеричное) {{filelist>linux/2.6.35/pxa270/*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} Для плат на основе PXA270 (только **rev.1.x**):\\ :!: Для ядра 2.6.22 используется [[u-boot#идентификатор_ядра|идентификатор machid]] 2d9 (шестнадцатеричное) {{filelist>linux/2.6.22/image/*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} [[linux-pxa270-old-patch|Более старые]] ===== Корневая файловая система ===== В процессе загрузки ядро Linux™ выполняет монтирование корневой файловой системы (КФС). КФС является необходимой частью для работы системы и содержит: * Модули ядра (''/lib/modules/'') * Библиотеки (''/lib/'') * Файлы устройств (''/dev/'') * Скрипты инициализации (''/etc/inittab'', ''/etc/init.d/'') * Стандартные UNIX-утилиты (''/sbin'', ''/bin'', ''/usr/sbin'') * Файлы конфигурации (''/etc/'') * Различные программы (в том числе и ваши) (''/usr/bin'') * Прочее ==== Flash ==== Размещение КФС на Flash позволяет сэкономить оперативную память не используя Ramdisk и сохранить данные при отключении питания/перезагрузке. На Flash должна размещаться предназначенная для этого файловая система, например, [[wp>Jffs2|JFFS2]]. - Включить в ядро поддержку MTD-устройств и файловой системы JFFS2 - В загрузчике - //Полностью// (целиком, а не под размер файла образа) стереть соответствующую область Flash для размещения файловой системы\\ (т.е. стереть //весь// будущий mtd-раздел для КФС) - Скопировать в эту область образ файловой системы JFFS2 с //соответствующим// Flash размером блока стирания (erase block) * Тион, Тион-Про: erase block size = 0x20000 * Тион-Про2, Тион-Модуль: erase block size = 0x40000 * Тион270, Тион-Про270: erase block size = 0x40000 - Указать в [[u-boot#параметры ядра|параметрах ядра]]: ''root=/dev/mtdblock2 rootfstype=jffs2'', где ''mtdblock2'' --- соответствующее блочное устройство для КФС с файловой системой JFFS2 Также можно в параметрах ядра указать ''ro'', при этом КФС будет смонтирована в режиме только для чтения. Перемонтировать КФС в режиме для записи можно командой: ''mount -o remount,rw /'' === JFFS2 в Buildroot === Для создания образа JFFS2 в Buildroot в menuconfig указать: Target filesystem options ---> [*] jffs2 root filesystem Flash Type (Select custom page and erase size) ---> (0x1000) Page Size (0x40000) Erase block size [ ] Do not use Cleanmarker [ ] RootFS in SREC file formet [*] Pad output (0x0) Pad output size (0x0 = to end of EB) ==== Ramdisk ==== FIXME ==== NFS ==== Использование [[wp>Network_File_System_(protocol)|NFS]] как КФС упрощает процесс разработки, позволяя вносить изменения в файлы КФС с host-компьютера и сразу видеть их на target-платформе. Для использования NFS как КФС следует: - Установить и настроить NFS-сервер на host-компьютере - Включить в ядро поддержку NFS для КФС (''CONFIG_ROOT_NFS'') - Указать в [[u-boot#параметры ядра|параметрах ядра]]: ''root=/dev/nfs nfsroot=10.42.42.12:/nfs/root ip=10.42.42.205:10.42.42.12:10.42.42.1'', где ''10.42.42.12'' --- IP-адрес сервера; ''10.42.42.205'' --- IP-адрес клиента (платы) * КФС по NFS не используется, если ядро использует КФС в ramdisk. * Для предотвращения изменения настроек сетевого интерфейса на КФС используется скрипт /etc/network/if-pre-up.d/nfs-root, иначе закомментируйте в /etc/network/interfaces строки: #auto eth0 #iface eth0 inet dhcp ==== CF-карта ==== Для использования КФС на CF-карте следует: - Создать на CF-карте раздел для КФС и создать на этом разделе ФС * См. утилиты ''fdisk'', ''cfdisk'', ''mke2fs'', ''mkfs.ext2'' - Примонтировать созданный раздел и скопировать на него файлы КФС * Файлы КФС проще всего взять из образа ext2 КФС, создаваемого системой сборки. При этом образ ext2 монтируется к директории (например) ''mnt'':\\ ''mount -o loop rootfs.arm.ext2 mnt''\\ Из этой директории mnt файлы КФС копируются на раздел носителя с сохранением прав, владельца, группы, ссылок, т.е. ''cp -a'' - Настроить загрузку с использованием созданного раздела как КФС * Указать в [[u-boot#параметры ядра|параметрах ядра]]: ''root=/dev/hda1'', если КФС располагается на первом разделе CF-карты - Может пригодиться параметр ядра ''rootdelay'', если попытка монтирования КФС будет выполнена раньше чем определение CF-карты ==== SD-карта ==== Для использования КФС на SD-карте следует: - Создать на SD-карте раздел для КФС и создать на этом разделе ФС - Примонтировать созданный раздел и скопировать на него файлы КФС, см [[#CF-карта| КФС на CF-карте]] - Настроить загрузку с использованием созданного раздела как КФС * Указать в [[u-boot#параметры ядра|параметрах ядра]]: ''root=/dev/mmcblk0p1'', если КФС располагается на первом разделе SD-карты - Может пригодиться параметр ядра ''rootdelay'', если попытка монтирования КФС будет выполнена раньше чем определение SD-карты ==== USB-Flash ==== - См. [[#cf-карта| КФС на CF-карте]] - В [[u-boot#параметры ядра|параметрах ядра]] указать: ''root=/dev/sda1'', если КФС располагается на первом разделе USB-Flash - Может пригодиться параметр ядра ''rootdelay'', если попытка монтирования КФС будет выполнена раньше чем определение USB-Flash ==== Различные сборки КФС ==== :!: Если вы не знаете с какой именно сборки начать, рекомендуется сборка выполненная Buildroot. В некоторых сборках при входе в систему используется логин ''root'' без пароля. Если название файла начинается на ''u'', то этот файл уже является образом [[U-Boot]]. === Для плат на базе EP93xx === == Buildroot, с конфигурацией == Конфигурация, вспомогательный скрипт и дополнительные файлы КФС находятся в директории ''local/tion''. В конфигурации используется интерфейс EABI, учтите это и при сборке //ядра// включите ''CONFIG_AEABI''. Основные этапы сборки: - Взять из репозитория\\ ''git clone URL'' - Скопировать файл конфигурации из ''local/tion/tion.config'' в ''.config'' и выполнить \\ ''make oldconfig'' - Выполнить загрузку архивов исходных кодов и сборку \\ ''make BOARD=tion'' При этом конфигурация будет использоваться из ''local/tion/tion.config'', и если конфигурация изменяется (''make menuconfig''), то она должна быть сохранена в ''local/tion/tion.config'' (или сделайте ссылку local/tion/tion.config на .config). [[git|Git]] репозиторий: http://zao-zeo.ru/media/files/linux/buildroot-2009.08.git [[linux-ep93xx-old-patch#buildroot_и_кфс|Более старые]] == Crater == Вы можете собрать КФС и ядро для плат на основе EP93xx с помощью ''Crater'' (модификация системы сборки [[http://buildroot.uclibc.org/|Buildroot]] от Cirrus Logic). См. также [[crater|описание сборки Crater]]. В конфигурации используется интерфейс OABI, учтите это и при сборке //ядра// выключите ''CONFIG_AEABI'' или включите ''CONFIG_OABI_COMPAT''. {{filelist>crater*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} == Прочие == {{filelist>rootfs/ep93xx/*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} === Для плат на базе PXA270 === == Buildroot, с конфигурацией == Конфигурация, вспомогательный скрипт и дополнительные файлы КФС находятся в директории ''local/tion270''. В конфигурации используется интерфейс EABI, учтите это и при сборке //ядра// включите ''CONFIG_AEABI''. Основные этапы сборки: - Взять из репозитория\\ ''git clone URL'' - Скопировать файл конфигурации из ''local/tion270/tion270.config'' в ''.config'' и выполнить \\ ''make oldconfig'' - Выполнить загрузку архивов исходных кодов и сборку \\ ''make BOARD=tion270'' При этом конфигурация будет использоваться из ''local/tion270/tion270.config'', и если конфигурация изменяется (''make menuconfig''), то она должна быть сохранена в ''local/tion270/tion270.config'' (или сделайте ссылку local/tion270/tion270.config на .config). [[git|Git]] репозиторий: http://zao-zeo.ru/media/files/linux/buildroot-2009.08.git {{filelist>rootfs/buildroot/pxa270/*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1&sort=ctime}} [[linux-pxa270-old-patch#buildroot_и_кфс|Более старые]] ===== Часы реального времени ===== * Текущее время задаётся командой ''date'' * Сохранение времени в RTC выполняется командой ''hwclock -w'' * Чтение времени из RTC выполняется командой ''hwclock -r'' * Если по команде ''hwclock -r'' выдаётся сообщение ''hwclock: RTC_RD_TIME: Invalid argument'', то сначала сохраните время в RTC командой ''hwclock -w'' или ''busybox hwclock -w'' ===== Дисплей ===== Для отключения засыпания дисплея можно использовать:\\ ''echo -en "\033[9;0]" > /dev/tty0'' ==== Разрешение ==== При использовании патчей для ядра с [[http://www.zao-zeo.ru/soft]] === Одноплатные компьютеры на основе Cirrus Logic EP9312/15 === В [[u-boot#параметры_ядра|параметрах ядра]] укажите:\\ ''video=ep93xxfb:vout=1,vmode='', где '''' --- номер соответствующий дисплею: ^ Дисплей ^ ^ | VGA | 16 | | 3.5" (320x240) | 17 | | 5.7" (640x480) | 18 | | 8", 10.4" (640x480) | 19 | | 8" (800x600) | 20 | | 8" (800x600)\\ A080SN01 | 22 | Если тип дисплея не указан, используется VGA-выход. === Одноплатные компьютеры на основе Marvell PXA270 === В [[u-boot#параметры_ядра|параметрах ядра]] укажите:\\ ''video=pxafb:tag='', где '''' --- значение соответствующее дисплею: ^ Дисплей ^ ^ | VGA | vga | | 3.5" (320x240) | 3.5 | | 5.7" (640x480) | 5.7 | | 8" (640x480) | 8 | | 8" (800x600)\\ OSD080TN42 | 8-800x600 | | 10" (640x480) | 10 | ^ Дисплей ^ Параметр ядра ^ | LVDS 10.4"(800x600) | video=pxafb:mode:800x600,pixclockpol:0,pixclock:21600 ((Начиная с svn1919))| Видео контроллер включается в режиме 18 bpp, если у вас адаптер для 16 bpp или [[tion270#отладочная_плата_сириус270|Сириус270]] старше rev1.0, то нужно добавить '':bpp=16'' ((Начиная с svn700)), например:\\ ''video=pxafb:tag=vga:bpp=16'' Если тип дисплея не указан, то VGA-выход отключён, потребление уменьшается на ~50 мА. ==== Подсветка ==== - Для плат на основе EP93xx управление подсветкой реализовано сигналом bright (см. ''/sys/class/backlight''). - Для плат на основе PXA270 управление подсветкой полностью не реализовано (сейчас подсветка или полностью отключена при blank или включена на 50%). На адаптерах для различных дисплеев есть перемычки --- ''включить подсветку'' (bl_on) или ''управлять подсветкой'' (bright). Замыкается //только одна// из двух перемычек! ===== Сенсорный экран ===== ==== Калибровка ==== Перед использованием сенсорного экрана (touch screen) его необходимо откалибровать, для этого в составе образа КФС Linux есть утилита ''ts_calibrate'' (из ''tslib''), запустите её и откалибруйте сенсорный экран. Проверить работу откалиброванного сенсорного экрана можно утилитой ''ts_test'' (из ''tslib''). Перед калибровкой убедитесь, что устройство не занято другой программой и, в случае если устройство занято, --- завершите программу которая занимает устройство. === Сохранение === Если вы используете ramdisk, то в него следует внести изменённые параметры калибровки, см. [[linux-faq#Как изменить ramdisk, как использовать CF-карту в качестве КФС]]. Изменённый файл калибровки ''/etc/pointercal'' не должен содержать лишних символов: пробела, табуляции, новой строки и т.д. ===Патчи === Корректное отображение утилит ''ts_calibrate'' и ''ts_test'' при цвете 18 bpp для плат на основе PXA270. {{filelist>patch/tslib-0.0.2.patch&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1}} ==== OPIE ==== Для использования сенсорного экрана нужно установить значение переменной окружения ''QWS_MOUSE_PROTO'' перед запуском OPIE. Например, для одноплатных компьютеров на основе Cirrus Logic EP9312/15 значение ''QWS_MOUSE_PROTO'' устанавливается в скрипте ''/sbin/startup'' (ранее в ''/sbin/start-opie''): * Для сенсорного экрана:\\ ''export QWS_MOUSE_PROTO=TPanel:/dev/misc/ep93xx_ts'' * Для мыши:\\ ''export QWS_MOUSE_PROTO=IntelliMouse:/dev/input/mice'' ===== Примеры ===== ==== Последовательный порт ==== {{filelist>examples/serial-pair*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1}} ==== QT ==== QT версии 2.3.10, для других версий, возможно, требуются изменения {{filelist>examples/leds-qt*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1}} ==== QT, Qwt, матричная клавиатура ==== QT версии 2.3.10, для других версий, возможно, требуются изменения {{filelist>examples/keypad-qt*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1}} ==== evdev: кнопка, матричная клавиатура ==== В ядре должен быть включён evdev (или модуль evdev). Программа читает указанный файл символьного устройства ''/dev/input/eventX'' {{filelist>examples/event*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1}} ==== CAN ==== {{filelist>examples/can-test*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1}} ==== pppd ==== Пример настройки для pppd демона (можно собрать в Buildroot) используемого для соединения по модему, в том числе GSM-модему. * Разместите содержимое архива в ''/etc/ppp'' * Файл настроки ''/etc/ppp/options'': устройство последовательного порта, скорость и пр. * Создайте символьную ссылку ln -s /etc/ppp/resolv.conf /etc/resolv.conf * Скрипт запуска ''/etc/ppp/start'', например /etc/ppp/start mts * В ядре должна быть поддержка PPP {{filelist>examples/ppp*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1}} ===== Компиляторы ===== ==== EP93xx ==== 1. Если вы используете Buildroot, то используйте компилятор и библиотеки собранные им (EABI или OABI). Cross-компиляторы собранные Buildroot 2009.08: {{filelist>tools/gcc/buildroot/*920*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1}} Для установки распакуйте в /, нужны права на запись в директорию /usr/local/arm. 2. [[http://arm.cirrus.com/files/tools/arm-linux-gcc-4.1.1-920t.tar.bz2]] Для установки распакуйте в ''/usr/local/arm'', нужны права на запись в эту директорию. Этим OABI компилятором можно собрать Crater. ==== PXA270 ==== 1. Если вы используете Buildroot, то используйте компилятор и библиотеки собранные им. Cross-компиляторы собранные Buildroot 2009.08: {{filelist>tools/gcc/buildroot/*xscale*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1}} Для установки распакуйте в /, нужны права на запись в директорию /usr/local/arm. 2. Cross-компиляторы собранные [[http://www.pengutronix.de/oselas/toolchain/index_en.html|Pengutronix OSELAS®.Toolchain( )]] с конфигурацией по умолчанию (библиотека ''glibc''). {{filelist>tools/gcc/oselas/*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1}} Для установки распакуйте в ''/'', нужны права на запись в директорию ''/opt''. ==== iMX28 ==== Cross-компиляторы, собранные Ltib (Ядро 2.6.35) {{filelist>tools/gcc/imx28/gcc-4*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1}} Cross-компиляторы, собранные Buildroot (Ядро 4x) {{filelist>tools/gcc/imx28/gcc-8*&style=table&tableheader=1&tableshowdate=1&tableshowsize=1&direct=1}}