Jump to content

    

shamrel

Свой
  • Content Count

    157
  • Joined

  • Last visited

Everything posted by shamrel


  1. at91sam9m10 + emmc

    Хотел пройти мимо, так как с таким семейством процессоров не работал, и не очень понятна ваша конфигурация. Но захотел разобраться. В качестве первичного загрузчика, что используется (u-boot, grub)?
  2. Моя статья по теме: Быстро поднятое не считается упавшим. Повышаем отказоустойчивость встраиваемых систем Заодно и попиарюсь :1111493779: Будут вопросы, пишите.
  3. Можно обратить внимание на стандартную библиотеку stdio.h. Функция printf вам в помощь. В зависимости от настроек компилятора, может получиться вполне приемлемый код. Нежели, нужно быстро обрабатывать, или мало свободного ОЗУ (подключение stdio откушает довольно таки много RAM), то по методу Сергея Борща.
  4. Могу рекомендовать Создание задач и управление ими в операционной системе реального времени FreeRTOS Там вроде под AVR и предельно просто.
  5. Все верно. Все в соответствии с вашей идеей. :) Только термин "значимость" слышу первый раз. CIC состоит из двух частей, первая часть работает на частоте DAC (50 МГц) . Вторая часть должна работать на пониженной частоте. Разработчик, который вел проект до меня, сделал это через тактирование. Клоки для второй части CIC брались от делителя (на счетчике) от клоков DAC. Проект был реализован в редакторе Schematic и без всяких sdc. Проект успешно (!) прошел тестирования и пошел в серию. Пока не понадобилось внести изменение в функционал и перевести на другую элементную базу. Небольшие изменения вносимые в произвольную часть схемы нарушали работоспособность. Когда добавил .sdc и прогнал в TimeQuest получил сплошные слаки. Исходная прошивка перестала быть работоспособной. Было принято решение переписать на Verilog. Что еще добавить? Пожалуй, то что я с ПЛИС до этого серьезно не работал. Возвращаясь к теме. Dmitriyspb предложил идею, которую сейчас прорабатываю. Первая и вторая часть тактируется одной, системной частотой, а понижение частоты происходит посредствам "пропускания" тактов. Типа: always @(posedge clk) .... if(sample)... где clk -- клоки высокочастотные (200МГц), а sample -- разрешение.
  6. Собственно, система такая. Есть 4 АЦП, каждый АЦП работает на 50МГц. Тактируется с ПЛИС (Altera). Частота АЦП неизменна. Внутри ПЛИС на каждый канал установлен дециматор CIC. После фильтра данные идут на мультиплексор. Выходы 4 каналов складываются в один большой FIFO. С другой стороны FIFO данные передаются в компьютер. Для работы CIC нужна опорная частота, которая будет определять коэффициент децимации, а по сути эквивалентную частоту дискретизации канала. Этот коэффициент децимации скидывается управляющей программой с компьютера. Таким образом, управление мультиплексоров должно выполнятся на частоте в 4 раза больше, чем частота CIC, и достигать максимума в 200МГц, когда децимация не требуется. На плату приходит 50МГц с внешнего генератора. В кристалле 2 PLL, одна используется для High speed USB, вторую планирую использовать для опроса АЦП. По поводу DDR триггера. Я не знаю как это реализовать. С ПЛИС работаю недавно.
  7. Vascom, имхо, мультиплексор внесет трудно прогнозируемую задержку. Особенно, если учесть, что исходные клоки (делитель 1) и клоки, после делителя (делитель на 2 и более) имеют всяко разную задержку. Да даже в идеале фаза будет смещена на 180. Dmitriyspb, спасибо! Что-то похожее крутилось в голове, но не могло сформироваться! Собственно, делитель не кратный 2, думаю, не составит труда сделать. Главное, что б на выходе длительность разрешающего импульса была равна периоду задающего такта. Внешний PLL -- наверное хорошо, но бюджет устройства крайне ограничен. Каждую лишнюю точку пайки считают. P.S.: Dmitriyspb, отдельное вам спасибо, за то, что показали как в ASCII на диаграмме единичку рисовать, а то я все символом 'T' :)
  8. Приветствую! В системе есть тактовая частота Fclk = 200МГц. От этой частоты нужно тактировать АЦП, ЦАП и цепочки фильтров. Причем, частота выборки устанавливается из вне (передается параметр) и может быть любой из Fclk/N , где N -- целое число 16-битное число (включая 1). Как можно это сделать? Делитель на счетчике с загрузкой? Выход не будет синхронным с основной частотой, да и минимальный коэффициент деления 2, а нужно 1 (нет деления). Использовать перестраиваемый PLL? Сильно громоздко получается (в Altera), или может я не до конца разобрался как это сделать. Или смириться с асинхронностью схемы?
  9. Рекомендую рабочий вариант с объяснениями: A serial interface is a simple way to connect an FPGA to a PC. We just need a transmitter and receiver module Правда, реализация на Verilog, но мне в свое время хорошо помог.
  10. Собственно, если еще актуально, то вот пример Термометра на LabVIEW. Там же модули для работы с FTDI и исходники, правда на Си для DS18B20 под атмегу. При необходимости можно запилить и под ПЛИС.
  11. Сергей, zhevak, благодарю за советы! Удалось поднять дебаг в Эклипсе, причем дебаг по Си коду. Создал пустой файл crt0.S, доставил плагин "zylin". Отладка запустилась. Точки останова ставятся, код выполняется. Значения переменных можно отследить. Однако, для работы с регистрами периферии нужен специальный файл с описанием архитектуры в формате XML (плагин "EmbSys Registers" ), иначе, только по адресам, естественно, под мой чип такого файла не оказалось. Вся система вышла на удивление нестабильной и глючной, потому виртуалка и буду IAR осваивать. :( Резюме. Отлаживать MSP430 под Eclipse в Линух можно, но сложно. НЕ РЕКОМЕНДУЮ! Еще раз, всем спасибо. Тему можно считать закрытой.
  12. В продолжение. Где взять crt0.S ? Где он должен лежать и для чего он вообще нужен? Почему в *.elf файле прописаны какие-то фантастические пути к crt0.S, типа: /home/pf/git/msp430eclipse/dk.xpg.msp430eclipse/scripts/src/gcc/libgcc/config/msp430/crt0.S Как Эклипс натравить на нужный файл?
  13. Приветствую! Собственно, в описании темы проблема озвучена. В настоящий момент развернут Toolchain для MSP, успешно подружен с Eclipse. Из командной строки работает mspdebug. Первый вопрос, как научить Eclipse дебажить код? Уважаемый мною (читал ваш блог и не только на технические темы) zhevak в одной из тем на форуме рассказал как дебажить контроллер в консольном режиме. В связи с чем вопрос, как с этим работать? Как имея программу на Си произвести ее отладку? Как узнать адреса для точек останова, выполнить пошагово код, прочитать регистры периферии? Или для этого нужно сначала дизассемблировать?
  14. Один из способов снять напряжение с VBUS: для USB1: devmem2 0x47401460 b 0x00 devmem2 0x47401460 b 0x01 для USB2: devmem2 0x47401c60 b 0x00 devmem2 0x47401c60 b 0x01 Но это же не красиво. :( Ну как же так?! Хочется пользоваться драйвером, и не хочется верить, что с обновлением ядра сломали удобный механизм.
  15. Спасибо за помощь, но нет. В этих файлах и так эти значения по умолчанию. Во все писаемые файлы из директории power уже писал все что угодно, и по исходникам смотрел, что туда вообще писать можно. # ls -l /sys/bus/usb/devices/1-1/power/ -r--r--r-- 1 root root 4096 Oct 29 10:40 active_duration -rw-r--r-- 1 root root 4096 Oct 29 10:32 autosuspend -rw-r--r-- 1 root root 4096 Oct 29 10:32 autosuspend_delay_ms -r--r--r-- 1 root root 4096 Oct 29 10:33 connected_duration -rw-r--r-- 1 root root 4096 Oct 29 10:33 control -rw-r--r-- 1 root root 4096 Oct 29 10:32 level -rw-r--r-- 1 root root 4096 Oct 29 10:40 persist -r--r--r-- 1 root root 4096 Oct 29 10:40 runtime_active_time -r--r--r-- 1 root root 4096 Oct 29 10:40 runtime_status -r--r--r-- 1 root root 4096 Oct 29 10:40 runtime_suspended_time -rw-r--r-- 1 root root 4096 Oct 29 10:40 wakeup -r--r--r-- 1 root root 4096 Oct 29 10:40 wakeup_abort_count -r--r--r-- 1 root root 4096 Oct 29 10:40 wakeup_active -r--r--r-- 1 root root 4096 Oct 29 10:40 wakeup_active_count -r--r--r-- 1 root root 4096 Oct 29 10:40 wakeup_count -r--r--r-- 1 root root 4096 Oct 29 10:40 wakeup_expire_count -r--r--r-- 1 root root 4096 Oct 29 10:40 wakeup_last_time_ms -r--r--r-- 1 root root 4096 Oct 29 10:40 wakeup_max_time_ms -r--r--r-- 1 root root 4096 Oct 29 10:40 wakeup_total_time_ms Да, эти же манипуляции проводил и с /sys/bus/usb/devices/usb1/power/ Проверил саму физическую возможность отключения питания. В device tree ножку, отвечающую за USB0_DRVVBUS, объявил как GPIO. в результате в "ручном" режиме питание отключается, однако при загрузке, естественно, ошибка с VBUS. Ну, и конечно, USB нормально не работает.
  16. Доброго Здоровья! Имеется плата на AM3359 ( на основе Beagle Bone Black) с запущенным linux 3.12, в качестве файловой системы использован слегка модифицированный линукс Angstrom. На USB1 запаян FT2232H. Стоит задача включать/выключать питание USB, для перезапуска FT2232H чипа (+ кое какая перефирия питается от +5В USB.). Начальные условия: # lsusb Bus 001 Device 002: ID 0403:6010 Future Technology Devices International, Ltd FT2232C Dual USB-UART/FIFO IC Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub # ls /sys/bus/usb/devices/ 1-0:1.0 1-1 1-1:1.0 1-1:1.1 2-0:1.0 usb1 usb2 Мои мытарства. Способ N1. Пытаемся воспользоваться старым приемом, записать в /sys/bus/usb/devices/usb1/power/level значение "suspend". Говорит, что инвалид аргумент, кроме того, радостно сообщает, что " WARNING! power/level is deprecated; use power/control instead". Пробуем с power/control -- тоже самое. Лезем в документацию и исходники, и выясняем, что теперь туда можно записать только значения "on" и "auto". Способ N2.. На импортных форумах рекомендуют для отключения/включения питания отбиндить, а затем заново забиндить устройство. Пытаюсь сделать это так: echo '1-0:1.0' > /sys/bus/usb/drivers/usb/unbind echo '1-1' > /sys/bus/usb/drivers/usb/unbind echo '1-1:1.0' > /sys/bus/usb/drivers/usb/unbind echo '1-1:1.1' > /sys/bus/usb/drivers/usb/unbind На все потуги ответ один: sh: write error: No such device До бинда дело не доходит. Как отключить питание на линии USB?
  17. U-Boot

    Доброго Здоровья! Не стал плодить тему, тем более, что название текущей как нельзя лучше подходит к сути вопроса. Как в исходниках u-boot грамотно активировать вывод сообщений, типа: pr_debug, debug, pr_warning? Пробовал в ./include/configd/custom_board.h добавлять соответствующие флаги, например: #define DEBUG (1) #define CONFIG_MTD_DEBUG (1) #define CONFIG_MTD_DEBUG_VERBOSE (7) эффекта не возымело. Как включить отладку? Можно ли включить отладку только для определенного модуля? С виду, все для этого есть, а вот руки кривоваты.
  18. Здравия! Для монтажа на линии обязательно между ножек должен быть полосок зеленки! Мы делаем так: ширина ножки -- 0.27мм, отступ маски от края ножки -- 0.055мм, мостик маски получается 0.1мм. Параметры выработаны монтажным цехом (SMD на линии) за много лет. Для производителей печатных плат такие зазоры относят к типовому техпроцессу.
  19. В своей практике используем description. Также можно по префиксу в серийном модуле.
  20. Доброго Здоровья! Схожая проблема. Имеется SMA розетка на плату -- вход/выход приемопередатчика на СС1101 (433МГц). Корпус изделия пластиковый, разъем служит для подключения внешней антенны. Требуется защитить вход от разрядов 4 кВ. Сигнальный проводник разъема соединен с общим проводом двумя встречно-параллельно включенными диодами BAV99 (эффективно спасает от теристорного эффекта по входу CC1101). Проблема заключается в том, что корпус разъема является опорным для сигнала, и способ отвода разряда с шасси по отдельной поверхности, как это принято делать для Ethernet и USB, тут не пройдет. Как быть? Кроме того, стоит проблема накопления потенциала на плате при длительном строке эксплуатации. Устройство запитано через DCDC от трехфазной сети. Это можно решить, соединив общий провод с нейтралью через конденсатор, скажем, 10нФ (4кВ) и резистор 1-2 МОм ? Делать отдельный разъем для "чистого заземления" крайне затруднительно.
  21. Спасибо, Jury093, и низкий поклон! Из линукса получается смонтировать, отформатировать, развернуть образ rootfs. Сейчас проблема в том, что u-boot и ядро имеют различную схему ECC. То-есть, образ файловой системы, записанный под u-boot, не монтируется в Linux. А если прошить в NAND образ u-boot.img и MLO из под Линукса, то не грузиться с NAND. Если же u-boot.img и MLO записаны в NAND под u-boot, то все хорошо. Сейчас загрузиться получается с uSD, но на серийном устройстве ее не будет. Нужно все действия выполнять под u-boot. Образ делал в два этапа: сначала mkfs.ubifs, а потом ubinize. Ядро и u-boot собраны с схемой ECC -- BH8 (аппаратный). u-boot версии 2014.01. Раньше можно было выбирать схему есс командой nandecc, теперь команды этой нет. .conffig содержит: # # Disk-On-Chip Device Drivers # # CONFIG_MTD_DOC2000 is not set # CONFIG_MTD_DOC2001 is not set # CONFIG_MTD_DOC2001PLUS is not set # CONFIG_MTD_DOCG3 is not set CONFIG_BCH_CONST_M=13 CONFIG_BCH_CONST_T=8 CONFIG_MTD_NAND_ECC=y # CONFIG_MTD_NAND_ECC_SMC is not set CONFIG_MTD_NAND=y # CONFIG_MTD_NAND_ECC_BCH is not set # CONFIG_MTD_SM_COMMON is not set # CONFIG_MTD_NAND_MUSEUM_IDS is not set # CONFIG_MTD_NAND_DENALI is not set # CONFIG_MTD_NAND_GPIO is not set CONFIG_MTD_NAND_OMAP2=y CONFIG_MTD_NAND_OMAP_BCH=y CONFIG_MTD_NAND_OMAP_BCH8=y # CONFIG_MTD_NAND_OMAP_BCH4 is not set CONFIG_MTD_NAND_IDS=y # CONFIG_MTD_NAND_DISKONCHIP is not set # CONFIG_MTD_NAND_DOCG4 is not set # CONFIG_MTD_NAND_NANDSIM is not set CONFIG_MTD_NAND_PLATFORM=y # CONFIG_MTD_ALAUDA is not set # CONFIG_MTD_ONENAND is not set из файла конфигурации платформы для u-boot: #ifdef CONFIG_NAND #define CONFIG_NAND_OMAP_GPMC #define CONFIG_NAND_OMAP_ELM #define CONFIG_SYS_NAND_5_ADDR_CYCLE #define CONFIG_SYS_NAND_PAGE_COUNT (CONFIG_SYS_NAND_BLOCK_SIZE / \ CONFIG_SYS_NAND_PAGE_SIZE) #define CONFIG_SYS_NAND_PAGE_SIZE 2048 #define CONFIG_SYS_NAND_OOBSIZE 64 #define CONFIG_SYS_NAND_BLOCK_SIZE (128*1024) #define CONFIG_SYS_NAND_BAD_BLOCK_POS NAND_LARGE_BADBLOCK_POS #define CONFIG_SYS_NAND_ECCPOS { 2, 3, 4, 5, 6, 7, 8, 9, \ 10, 11, 12, 13, 14, 15, 16, 17, \ 18, 19, 20, 21, 22, 23, 24, 25, \ 26, 27, 28, 29, 30, 31, 32, 33, \ 34, 35, 36, 37, 38, 39, 40, 41, \ 42, 43, 44, 45, 46, 47, 48, 49, \ 50, 51, 52, 53, 54, 55, 56, 57, } #define CONFIG_SYS_NAND_ECCSIZE 512 #define CONFIG_SYS_NAND_ECCBYTES 14 #define CONFIG_SYS_NAND_ONFI_DETECTION #define CONFIG_NAND_OMAP_ECCSCHEME OMAP_ECC_BCH8_CODE_HW #define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE #define CONFIG_SYS_NAND_U_BOOT_OFFS 0x80000 #endif #endif /* NAND support */ #ifdef CONFIG_NAND #define CONFIG_CMD_NAND #define GPMC_NAND_ECC_LP_x16_LAYOUT 1 #if !defined(CONFIG_SPI_BOOT) && !defined(CONFIG_NOR_BOOT) #define MTDIDS_DEFAULT "nand0=omap2-nand.0" #define MTDPARTS_DEFAULT "mtdparts=omap2-nand.0:128k(SPL)," \ "128k(SPL.backup1)," \ "128k(SPL.backup2)," \ "128k(SPL.backup3),1792k(u-boot)," \ "128k(u-boot-spl-os)," \ "128k(u-boot-env),5m(kernel),-(rootfs)" #define CONFIG_ENV_IS_IN_NAND #define CONFIG_ENV_OFFSET 0x260000 /* environment starts here */ #define CONFIG_SYS_ENV_SECT_SIZE (128 << 10) /* 128 KiB */ #endif #endif P.S: Причина редактирования: добавил конфигурацию.
  22. Здоровья всем! Проследил по исходникам путь от считывания DT, до инициализации драйвера. Нашел вчем трабла, hwmod для GPMC модуля был задал не корректно. Исправил. В ситеме появились признаки NAND: root@am33:~# dmesg | grep NAND [ 32.703146] jffs2: version 2.2. (NAND) (SUMMARY) �© 2001-2006 Red Hat, Inc. [ 34.003647] enabling NAND BCH ecc with 8-bit correction [ 34.020513] NAND device: Manufacturer ID: 0x2c, Chip ID: 0xda (Micron MT29F2G08AB4 [ 34.492286] OneNAND driver initializing root@am33:~# cat /proc/mtd dev: size erasesize name mtd0: 00020000 00020000 "SPL1" mtd1: 00020000 00020000 "SPL2" mtd2: 00020000 00020000 "SPL3" mtd3: 00020000 00020000 "SPL4" mtd4: 001e0000 00020000 "U-boot" mtd5: 00020000 00020000 "environment" mtd6: 00500000 00020000 "Kernel" mtd7: 0f880000 00020000 "File-System" root@am33:~# dmesg | grep GPMC [ 0.099427] omap-gpmc 50000000.gpmc: GPMC revision 6.0 [ 0.099645] GPMC CS0: cs_on : 0 ticks, 0 ns (was 0 ticks) 0 ns [ 0.099659] GPMC CS0: cs_rd_off : 5 ticks, 50 ns (was 30 ticks) 44 ns [ 0.099672] GPMC CS0: cs_wr_off : 5 ticks, 50 ns (was 30 ticks) 44 ns [ 0.099684] GPMC CS0: adv_on : 1 ticks, 10 ns (was 0 ticks) 6 ns [ 0.099697] GPMC CS0: adv_rd_off: 4 ticks, 40 ns (was 30 ticks) 34 ns [ 0.099709] GPMC CS0: adv_wr_off: 5 ticks, 50 ns (was 30 ticks) 44 ns [ 0.099721] GPMC CS0: oe_on : 1 ticks, 10 ns (was 7 ticks) 6 ns [ 0.099734] GPMC CS0: oe_off : 6 ticks, 60 ns (was 24 ticks) 54 ns [ 0.099746] GPMC CS0: we_on : 1 ticks, 10 ns (was 5 ticks) 6 ns [ 0.099759] GPMC CS0: we_off : 4 ticks, 40 ns (was 22 ticks) 40 ns [ 0.099771] GPMC CS0: rd_cycle : 9 ticks, 90 ns (was 30 ticks) 82 ns [ 0.099784] GPMC CS0: wr_cycle : 9 ticks, 90 ns (was 30 ticks) 82 ns [ 0.099797] GPMC CS0: access : 7 ticks, 70 ns (was 21 ticks) 64 ns [ 0.099808] GPMC CS0: page_burst_access: 0 ticks, 0 ns (was 0 ticks) 0 ns [ 0.099819] GPMC CS0: bus_turnaround: 0 ticks, 0 ns (was 0 ticks) 0 ns [ 0.099831] GPMC CS0: cycle2cycle_delay: 0 ticks, 0 ns (was 15 ticks) 0 ns [ 0.099842] GPMC CS0: wait_monitoring: 0 ticks, 0 ns (was 0 ticks) 0 ns [ 0.099853] GPMC CS0: clk_activation: 0 ticks, 0 ns (was 0 ticks) 0 ns [ 0.099865] GPMC CS0: wr_data_mux_bus: 0 ticks, 0 ns (was 0 ticks) 0 ns [ 0.099876] GPMC CS0: wr_access : 0 ticks, 0 ns (was 22 ticks) 0 ns root@am33:~# ls -l /dev/mtd* crw------- 1 root root 90, 0 Feb 18 13:35 /dev/mtd0 crw------- 1 root root 90, 1 Feb 18 13:35 /dev/mtd0ro crw------- 1 root root 90, 2 Feb 18 13:35 /dev/mtd1 crw------- 1 root root 90, 3 Feb 18 13:35 /dev/mtd1ro crw------- 1 root root 90, 4 Feb 18 13:35 /dev/mtd2 crw------- 1 root root 90, 5 Feb 18 13:35 /dev/mtd2ro crw------- 1 root root 90, 6 Feb 18 13:35 /dev/mtd3 crw------- 1 root root 90, 7 Feb 18 13:35 /dev/mtd3ro crw------- 1 root root 90, 8 Feb 18 13:35 /dev/mtd4 crw------- 1 root root 90, 9 Feb 18 13:35 /dev/mtd4ro crw------- 1 root root 90, 10 Feb 18 13:35 /dev/mtd5 crw------- 1 root root 90, 11 Feb 18 13:35 /dev/mtd5ro crw------- 1 root root 90, 12 Feb 18 13:35 /dev/mtd6 crw------- 1 root root 90, 13 Feb 18 13:35 /dev/mtd6ro crw------- 1 root root 90, 14 Feb 18 13:35 /dev/mtd7 crw------- 1 root root 90, 15 Feb 18 13:35 /dev/mtd7ro brw-rw---- 1 root disk 31, 0 Feb 18 13:35 /dev/mtdblock0 brw-rw---- 1 root disk 31, 1 Feb 18 13:35 /dev/mtdblock1 brw-rw---- 1 root disk 31, 2 Feb 18 13:35 /dev/mtdblock2 brw-rw---- 1 root disk 31, 3 Feb 18 13:35 /dev/mtdblock3 brw-rw---- 1 root disk 31, 4 Feb 18 13:35 /dev/mtdblock4 brw-rw---- 1 root disk 31, 5 Feb 18 13:35 /dev/mtdblock5 brw-rw---- 1 root disk 31, 6 Feb 18 13:35 /dev/mtdblock6 brw-rw---- 1 root disk 31, 7 Feb 18 13:35 /dev/mtdblock7 Однако, вот беда! При попытки смонтировать, выходит куча ошибок: [ 2691.557480] UBI error: ubi_io_read: error -74 (ECC error) while reading 512 bytess [ 2691.568412] [<c0010317>] (unwind_backtrace+0x1/0x8a) from [<c01eb9a1>] (ubi_io_re) [ 2691.577605] [<c01eb9a1>] (ubi_io_read+0x155/0x1f0) from [<c01ebce3>] (ubi_io_read) [ 2691.587332] [<c01ebce3>] (ubi_io_read_vid_hdr+0x4f/0x13c) from [<c01eeccd>] (scan) [ 2691.597345] [<c01eeccd>] (scan_peb.part.4+0x10d/0x3e4) from [<c01ef009>] (scan_al) [ 2691.606370] [<c01ef009>] (scan_all+0x65/0x754) from [<c01ef9b9>] (ubi_attach+0x15) [ 2691.614922] [<c01ef9b9>] (ubi_attach+0x15d/0x234) from [<c01e82c3>] (ubi_attach_m) [ 2691.624471] [<c01e82c3>] (ubi_attach_mtd_dev+0x503/0x97c) from [<c01e88e3>] (ctrl) [ 2691.634421] [<c01e88e3>] (ctrl_cdev_ioctl+0x7f/0x104) from [<c009e239>] (do_vfs_i) [ 2691.643799] [<c009e239>] (do_vfs_ioctl+0x3a9/0x3f0) from [<c009e2af>] (sys_ioctl+) [ 2691.652532] [<c009e2af>] (sys_ioctl+0x2f/0x44) from [<c000c401>] (ret_fast_syscal) [ 2691.661554] UBI: scanning is finished [ 2691.665405] UBI error: late_analysis: MTD device is not UBI-formatted and possiblt [ 2691.677391] UBI error: ubi_attach_mtd_dev: failed to attach mtd7, error -22 Может в этом проблема? Что-то лишнее включил. Что минимально следует включить в ядре, чтоб получить работающий NAND?
  23. ... не выходит Каменный Цветок... Складывается впечатление, что ядро и не начинает искать NAND. Не могу проследить путь вызова драйвера, связь DTB и собственно драйвера. В файл ./drivers/mtd/nand/nand_base.c. добавил информацию для дебага, поставил всюду printk, из всего многообразия, вызывается только функция nand_base_init(void), которая, собственно, кроме регистрации светодиода на переключение согласно NAND ничегошеньки не делает, функции инициализации NAND при запуски ядра не используются. Эти функции подсовываются макросу EXPORT_SYMBOL(nand_scan); EXPORT_SYMBOL(nand_scan_ident); реализацию EXPORT_SYMBOL нашел в ./include/linux/export.h , но понимания мне не добавила. Люди добрые, научите, как дебажить ядро?
  24. Добро. Спасибо за совет! буду ядро дебажить.