wiki:video-voip3
no way to compare when less than two revisions
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версияПоследняя версия | |||
— | wiki:video-voip3 [2016/06/28 18:54] – [Ядро] maxx | ||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== Video VoIP ====== | ||
+ | Макет №3 на IMX6 | ||
+ | ====== Компиляция ПО ====== | ||
+ | ===== Компилятор ===== | ||
+ | Использую " | ||
+ | ===== u-boot ===== | ||
+ | Скачиваем файл u-boot.mainline.tgz из папки Dropbox: [[https:// | ||
+ | < | ||
+ | $ tar xzf u-boot.mainline.tgz | ||
+ | $ cd u-boot.mainline | ||
+ | $ make ARCH=arm titanium_config | ||
+ | $ make ARCH=arm CROSS_COMPILE=/ | ||
+ | </ | ||
+ | Если компиляция завершилась успешно, | ||
+ | ===== kobs-ng ===== | ||
+ | Утилита kobs-ng нужна для записи образа u-boot в NAND память, | ||
+ | Скачиваем архив kobs-ng-3.0.35-4.0.0.tar.gz из [[https:// | ||
+ | |||
+ | распаковываем и выполняем команды: | ||
+ | < | ||
+ | $ export PATH=/ | ||
+ | $ ./configure CC=arm-linux-gnueabihf-gcc --host=arm-linux-gnueabihf-gcc | ||
+ | $ make -j4 LDFLAGS=-static | ||
+ | $ arm-linux-gnueabihf-strip src/kobs-ng | ||
+ | </ | ||
+ | Если компиляция выполнена успешно, | ||
+ | ===== imx_usb_loader ===== | ||
+ | Утилита imx_usb_loader нужна, чтобы загрузить u-boot на абсолютно чистую плату после производства. В каком бы положении не были конфигурационные ноги у " | ||
+ | < | ||
+ | $ git clone https:// | ||
+ | $ cd imx_usb_loader | ||
+ | $ make | ||
+ | </ | ||
+ | Перед загрузкой убедитесь, | ||
+ | < | ||
+ | $ lsusb | ||
+ | Bus 002 Device 007: ID 15a2:0054 Freescale Semiconductor, | ||
+ | </ | ||
+ | Непосредственно загрузка процессора: | ||
+ | < | ||
+ | $ ./ | ||
+ | </ | ||
+ | ===== Ядро ===== | ||
+ | Архив с ядром в папке Dropbox, либо можно отдельно взять board-wand.c и defconfig. | ||
+ | |||
+ | < | ||
+ | cp defconfig .config | ||
+ | make ARCH=arm oldconfig | ||
+ | </ | ||
+ | ===== Файловая система для запуска ===== | ||
+ | Для первоначального запуска платы можно использовать компактную файловую систему, | ||
+ | [[https:// | ||
+ | |||
+ | ====== Загрузка платы ====== | ||
+ | ====== Подготовка ====== | ||
+ | Для записи загрузчика, | ||
+ | |||
+ | ====== Загрузка u-boot ====== | ||
+ | Подключаем плату к USB порту ПК через кабель mini-USB (на плате разъем X7). В Linux плата (процессор) определяется как "Bus 002 Device 003: ID 15a2:0054 Freescale Semiconductor, | ||
+ | < | ||
+ | sudo ../ | ||
+ | </ | ||
+ | На консоле должен появится загруженный u-boot. Доступны команды работы с USB-host и NAND. Из u-boot можно записать только файл ядра uImage и файловую систему, | ||
+ | ====== Загрузка ПО в NAND ====== | ||
+ | Прежде всего загружаем Linux. Для загрузки Linux потребуются два файла: файл ядра uImage и файл с файловой системой uInitrd, которые мы скомпилировали ранее. Берем USB флешку на 4GB (на 8GB почему-то работает с серьезными сбоями, | ||
+ | < | ||
+ | / # run usb_boot | ||
+ | </ | ||
+ | Либо все команды ручками: | ||
+ | < | ||
+ | Titanium > usb start | ||
+ | Titanium > fatload usb 0 ${loadaddr} uImage | ||
+ | Titanium > setenv rdaddr 0x13000000 | ||
+ | Titanium > fatload usb 0 ${rdaddr} uInitrd | ||
+ | Titanium > setenv video mxcfb0: | ||
+ | Titanium > setenv bootargs console=${console}, | ||
+ | Titanium > bootm ${loadaddr} ${rdaddr} | ||
+ | </ | ||
+ | На консоле отображается лог загрузки и далее надо нажать Enter, чтобы появилась командная строка. | ||
+ | |||
+ | В логе загрузке должны отобразится разделы NAND: | ||
+ | < | ||
+ | [ 1.913029] Creating 5 MTD partitions on " | ||
+ | [ 1.918090] 0x000000000000-0x000000300000 : " | ||
+ | [ 1.924126] 0x000000300000-0x000000320000 : " | ||
+ | [ 1.929530] 0x000000320000-0x000000340000 : " | ||
+ | [ 1.934951] 0x000000340000-0x000000840000 : " | ||
+ | [ 1.940573] 0x000000840000-0x000010000000 : " | ||
+ | </ | ||
+ | ===== Запись u-boot ===== | ||
+ | Сначала включим питание USB-host: | ||
+ | < | ||
+ | / # echo " | ||
+ | [ | ||
+ | [ | ||
+ | [ | ||
+ | [ | ||
+ | [ | ||
+ | [ | ||
+ | [ | ||
+ | [ | ||
+ | </ | ||
+ | Видно, что определился диск /dev/sda1, монтируем его: | ||
+ | < | ||
+ | / # mkdir /mnt | ||
+ | / # mount /dev/sda1 /mnt | ||
+ | / # ls -l /mnt | ||
+ | -rwxr-xr-x | ||
+ | -rwxr-xr-x | ||
+ | -rwxr-xr-x | ||
+ | -rwxr-xr-x | ||
+ | -rwxr-xr-x | ||
+ | -rwxr-xr-x | ||
+ | -rwxr-xr-x | ||
+ | </ | ||
+ | Проверим какие у нас есть разделы на NAND: | ||
+ | < | ||
+ | / # ls -l /dev/mtd* | ||
+ | crw------- | ||
+ | crw------- | ||
+ | crw------- | ||
+ | crw------- | ||
+ | crw------- | ||
+ | crw------- | ||
+ | crw------- | ||
+ | crw------- | ||
+ | crw------- | ||
+ | crw------- | ||
+ | brw------- | ||
+ | brw------- | ||
+ | brw------- | ||
+ | brw------- | ||
+ | brw------- | ||
+ | </ | ||
+ | u-boot записывают в самый первый раздел NAND по нулевому адресу, | ||
+ | < | ||
+ | / # / | ||
+ | MTD CONFIG: | ||
+ | chip_0_device_path = "/ | ||
+ | chip_1_device_path = " | ||
+ | search_exponent = 2 | ||
+ | data_setup_time = 80 | ||
+ | data_hold_time = 60 | ||
+ | address_setup_time = 25 | ||
+ | data_sample_time = 6 | ||
+ | row_address_size = 3 | ||
+ | column_address_size = 2 | ||
+ | read_command_code1 = 0 | ||
+ | read_command_code2 = 48 | ||
+ | boot_stream_major_version = 1 | ||
+ | boot_stream_minor_version = 0 | ||
+ | boot_stream_sub_version = 0 | ||
+ | ncb_version = 3 | ||
+ | boot_stream_1_address = 0 | ||
+ | boot_stream_2_address = 0 | ||
+ | -- We add the 1k-padding to the uboot. | ||
+ | .tmp_kobs_ng: | ||
+ | .tmp_kobs_ng: | ||
+ | mtd: opening: "/ | ||
+ | NFC geometry : | ||
+ | ECC Strength | ||
+ | Page Size in Bytes : 2112 | ||
+ | Metadata size : 10 | ||
+ | ECC Chunk Size in byte : 512 | ||
+ | ECC Chunk count : 4 | ||
+ | Block Mark Byte Offset : 1999 | ||
+ | Block Mark Bit Offset | ||
+ | ==================================================== | ||
+ | mtd: opened '/ | ||
+ | mtd: max_boot_stream_size_in_bytes = 1048576 | ||
+ | mtd: boot_stream_size_in_bytes = 438272 | ||
+ | mtd: boot_stream_size_in_pages = 214 | ||
+ | mtd: #1 0x00100000 - 0x00200000 (0x0016b000) | ||
+ | mtd: #2 0x00200000 - 0x00300000 (0x0026b000) | ||
+ | FCB | ||
+ | m_u32Checksum = 0x00000000 | ||
+ | m_u32FingerPrint = 0x20424346 | ||
+ | m_u32Version = 0x01000000 | ||
+ | m_NANDTiming.m_u8DataSetup = 80 | ||
+ | m_NANDTiming.m_u8DataHold = 60 | ||
+ | m_NANDTiming.m_u8AddressSetup = 25 | ||
+ | m_NANDTiming.m_u8DSAMPLE_TIME = 6 | ||
+ | m_u32PageDataSize = 2048 | ||
+ | m_u32TotalPageSize = 2112 | ||
+ | m_u32SectorsPerBlock = 64 | ||
+ | m_u32NumberOfNANDs = 0 | ||
+ | m_u32TotalInternalDie = 0 | ||
+ | m_u32CellType = 0 | ||
+ | m_u32EccBlockNEccType = 4 | ||
+ | m_u32EccBlock0Size = 512 | ||
+ | m_u32EccBlockNSize = 512 | ||
+ | m_u32EccBlock0EccType = 4 | ||
+ | m_u32MetadataBytes = 10 | ||
+ | m_u32NumEccBlocksPerPage = 3 | ||
+ | m_u32EccBlockNEccLevelSDK = 0 | ||
+ | m_u32EccBlock0SizeSDK = 0 | ||
+ | m_u32EccBlockNSizeSDK = 0 | ||
+ | m_u32EccBlock0EccLevelSDK = 0 | ||
+ | m_u32NumEccBlocksPerPageSDK = 0 | ||
+ | m_u32MetadataBytesSDK = 0 | ||
+ | m_u32EraseThreshold = 0 | ||
+ | m_u32Firmware1_startingPage = 512 | ||
+ | m_u32Firmware2_startingPage = 1024 | ||
+ | m_u32PagesInFirmware1 = 214 | ||
+ | m_u32PagesInFirmware2 = 214 | ||
+ | m_u32DBBTSearchAreaStartAddress = 256 | ||
+ | m_u32BadBlockMarkerByte = 1999 | ||
+ | m_u32BadBlockMarkerStartBit = 0 | ||
+ | m_u32BBMarkerPhysicalOffset = 2048 | ||
+ | m_u32BCHType = 0 | ||
+ | m_NANDTMTiming.m_u32TMTiming2_ReadLatency = 0 | ||
+ | m_NANDTMTiming.m_u32TMTiming2_PreambleDelay = 0 | ||
+ | m_NANDTMTiming.m_u32TMTiming2_CEDelay = 0 | ||
+ | m_NANDTMTiming.m_u32TMTiming2_PostambleDelay = 0 | ||
+ | m_NANDTMTiming.m_u32TMTiming2_CmdAddPause = 0 | ||
+ | m_NANDTMTiming.m_u32TMTiming2_DataPause = 0 | ||
+ | m_NANDTMTiming.m_u32TMSpeed = 0 | ||
+ | m_NANDTMTiming.m_u32TMTiming1_BusyTimeout = 0 | ||
+ | m_u32DISBBM = 0 | ||
+ | DBBT | ||
+ | m_u32Checksum = 0x00000000 | ||
+ | m_u32FingerPrint = 0x54424244 | ||
+ | m_u32Version = 0x01000000 | ||
+ | m_u32DBBTNumOfPages = 0 | ||
+ | Firmware: image #0 @ 0x100000 size 0x6b000 - available 0x100000 | ||
+ | Firmware: image #1 @ 0x200000 size 0x6b000 - available 0x100000 | ||
+ | -------------- Start to write the [ FCB ] ----- | ||
+ | mtd: erasing @0: | ||
+ | mtd: Writing FCB0 [ @0:0x0 ] (840) * | ||
+ | mtd: erasing @0: | ||
+ | mtd: Writing FCB1 [ @0:0x20000 ] (840) * | ||
+ | mtd: erasing @0: | ||
+ | mtd: Writing FCB2 [ @0:0x40000 ] (840) * | ||
+ | mtd: erasing @0: | ||
+ | mtd: Writing FCB3 [ @0:0x60000 ] (840) * | ||
+ | mtd_commit_bcb(FCB): | ||
+ | |||
+ | -------------- Start to write the [ DBBT ] ----- | ||
+ | mtd: erasing @0: | ||
+ | mtd: Writing DBBT0 [ @0:0x80000 ] (800) * | ||
+ | mtd: erasing @0: | ||
+ | mtd: Writing DBBT1 [ @0:0xa0000 ] (800) * | ||
+ | mtd: erasing @0: | ||
+ | mtd: Writing DBBT2 [ @0:0xc0000 ] (800) * | ||
+ | mtd: erasing @0: | ||
+ | mtd: Writing DBBT3 [ @0:0xe0000 ] (800) * | ||
+ | mtd_commit_bcb(DBBT): | ||
+ | |||
+ | ---------- Start to write the [ .tmp_kobs_ng ]---- | ||
+ | mtd: Writting .tmp_kobs_ng: | ||
+ | mtd: erasing @0: | ||
+ | mtd: erasing @0: | ||
+ | mtd: erasing @0: | ||
+ | mtd: erasing @0: | ||
+ | mtd: We write one page for save guard. * | ||
+ | mtd: Writting .tmp_kobs_ng: | ||
+ | mtd: erasing @0: | ||
+ | mtd: erasing @0: | ||
+ | mtd: erasing @0: | ||
+ | mtd: erasing @0: | ||
+ | mtd: We write one page for save guard. * | ||
+ | </ | ||
+ | ===== Запись файла ядра ===== | ||
+ | Использование ключа ' | ||
+ | < | ||
+ | / # nandwrite -p /dev/mtd3 /mnt/uImage | ||
+ | Writing at 0x00000000 | ||
+ | Writing at 0x00020000 | ||
+ | Writing at 0x00040000 | ||
+ | Writing at 0x00060000 | ||
+ | Writing at 0x00080000 | ||
+ | Writing at 0x000a0000 | ||
+ | Writing at 0x000c0000 | ||
+ | Writing at 0x000e0000 | ||
+ | Writing at 0x00100000 | ||
+ | Writing at 0x00120000 | ||
+ | Writing at 0x00140000 | ||
+ | Writing at 0x00160000 | ||
+ | Writing at 0x00180000 | ||
+ | Writing at 0x001a0000 | ||
+ | Writing at 0x001c0000 | ||
+ | Writing at 0x001e0000 | ||
+ | Writing at 0x00200000 | ||
+ | Writing at 0x00220000 | ||
+ | Writing at 0x00240000 | ||
+ | Writing at 0x00260000 | ||
+ | Writing at 0x00280000 | ||
+ | Writing at 0x002a0000 | ||
+ | Writing at 0x002c0000 | ||
+ | Writing at 0x002e0000 | ||
+ | Writing at 0x00300000 | ||
+ | Writing at 0x00320000 | ||
+ | Writing at 0x00340000 | ||
+ | Writing at 0x00360000 | ||
+ | Writing at 0x00380000 | ||
+ | Writing at 0x003a0000 | ||
+ | Writing at 0x003c0000 | ||
+ | </ | ||
+ | ===== Запись файловой системы ===== | ||
+ | Для примера загрузим файловую систему Debian 7.5 - файл debian-7.5-bare-armhf-2014-07-07.tar.xz, | ||
+ | |||
+ | К сожалению, | ||
+ | |||
+ | Далее, создадим временную папку ubidisk | ||
+ | < | ||
+ | / # mkdir ubidisk | ||
+ | </ | ||
+ | Создадим UBI раздел на разделе NAND | ||
+ | < | ||
+ | ubiformat /dev/mtd4 | ||
+ | ubiattach / | ||
+ | ubimkvol /dev/ubi0 -s 235MiB -N rootfs | ||
+ | mount -t ubifs ubi0:rootfs ubidisk | ||
+ | </ | ||
+ | Теперь можно перейти в директорию ubidisk и создавать и изменять файлы там и всё это будет записано как UBIFS. Запишем файловую систему Debian 7.5 на UBI раздел в NAND: | ||
+ | < | ||
+ | cd ubidisk/ | ||
+ | tar xf / | ||
+ | </ | ||
+ | Теперь включим консоль, | ||
+ | < | ||
+ | T0: | ||
+ | </ | ||
+ | Сохраняем изменения и можно просто перезагрузить плату и ничего не трогать. После загрузки должна загрузится ОС Debian. | ||
+ | ===== Конфигурация BOOT_CFG ===== | ||
+ | Для старта процессора с NAND необходимо обеспечить следующее состояние резисторов на плате: | ||
+ | |||
+ | BOOT_CFG1 = 0x80 | ||
+ | | R88 | нет | | ||
+ | | R89 | нет | | ||
+ | | R87 | нет | | ||
+ | | R90 | нет | | ||
+ | | R132 | нет | | ||
+ | | R92 | нет | | ||
+ | | R129 | нет | | ||
+ | ^ R95 ^ ДА | | ||
+ | BOOT_CFG2 = 0x02 | ||
+ | | R93 | нет | | ||
+ | ^ R91 ^ ДА | | ||
+ | | R96 | нет | | ||
+ | | R94 | нет | | ||
+ | | R131 | нет | | ||
+ | | R130 | нет | | ||
+ | | R97 | нет | | ||
+ | | R86 | нет | | ||
+ | То есть получится " |
wiki/video-voip3.txt · Последнее изменение: 2016/07/14 15:08 — maxx