|
Linux-3.8.13. Device Tree., Ti. Am33xx. Вопросы по созданию платформы |
|
|
|
Feb 12 2014, 04:53
|

Частый гость
 
Группа: Свой
Сообщений: 132
Регистрация: 10-10-07
Из: Новосибирск
Пользователь №: 31 229

|
Доброго Здоровья! Имеется устройства на основе Beaglebone Black (BBB). На плату добавлена NAND память MT29F2G08ABAEAH4. Схема включения в приложении.
nand.PDF ( 37.18 килобайт )
Кол-во скачиваний: 386В настоящий момент система грузиться с SD карты. Однако, хочется грузиться с NAND. Для этого считаю нужным добавить в файлы "Device Tree", описывающие платформу, информацию о NAND. При добавлении руководствовался информацией: PATCH. Philip Avinash. В результате чего,в файл am335x-bone-common.dtsi добавил: CODE am33xx_pinmux: pinmux@44e10800 { pinctrl-names = "default"; pinctrl-0 = <&nandflash_pins_s0>;
... nandflash_pins_s0: nandflash_pins_s0 { pinctrl-single,pins = < 0x0 0x30 /* gpmc_ad0.gpmc_ad0, INPUT | PULLUP | MODE0 */ 0x4 0x30 /* gpmc_ad1.gpmc_ad1, INPUT | PULLUP | MODE0 */ 0x8 0x30 /* gpmc_ad2.gpmc_ad2, INPUT | PULLUP | MODE0 */ 0xc 0x30 /* gpmc_ad3.gpmc_ad3, INPUT | PULLUP | MODE0 */ 0x10 0x30 /* gpmc_ad4.gpmc_ad4, INPUT | PULLUP | MODE0 */ 0x14 0x30 /* gpmc_ad5.gpmc_ad5, INPUT | PULLUP | MODE0 */ 0x18 0x30 /* gpmc_ad6.gpmc_ad6, INPUT | PULLUP | MODE0 */ 0x1c 0x30 /* gpmc_ad7.gpmc_ad7, INPUT | PULLUP | MODE0 */ 0x70 0x30 /* gpmc_wait0.gpmc_wait0, INPUT | PULLUP | MODE0 */ 0x74 0x37 /* gpmc_wpn.gpio0_30, INPUT | PULLUP | MODE7 */ 0x7c 0x8 /* gpmc_csn0.gpmc_csn0, PULL DISA */ 0x90 0x8 /* gpmc_advn_ale.gpmc_advn_ale, PULL DISA */ 0x94 0x8 /* gpmc_oen_ren.gpmc_oen_ren, PULL DISA */ 0x98 0x8 /* gpmc_wen.gpmc_wen, PULL DISA */ 0x9c 0x8 /* gpmc_be0n_cle.gpmc_be0n_cle, PULL DISA */ >; }; };
ocp: ocp {
...
elm: elm@48080000 { status = "okay"; }; gpmc: gpmc@50000000 { status = "okay"; ranges = <0 0 0x08000000 0x10000000>; /* CS0: NAND */ /*compatible = "ti,am3352-gpms"; ?????? */ ti,hwmods = "gpms"; nand@0,0 { reg = <0 0 0>; /* CS0, offset 0 */ nand-bus-width = <8>; ti,nand-ecc-opt = "bch8";
gpmc,sync-clk = <0>; gpmc,cs-on = <0>; gpmc,cs-rd-off = <44>; gpmc,cs-wr-off = <44>; gpmc,adv-on = <6>; gpmc,adv-rd-off = <34>; gpmc,adv-wr-off = <44>; gpmc,we-off = <40>; gpmc,oe-off = <54>; gpmc,access = <64>; gpmc,rd-cycle = <82>; gpmc,wr-cycle = <82>; gpmc,wr-access = <40>; gpmc,wr-data-mux-bus = <0>;
#address-cells = <1>; #size-cells = <1>; elm_id = <&elm>;
/* MTD partition table */ partition@0 { label = "SPL1"; reg = <0x00000000 0x000020000>; };
partition@1 { label = "SPL2"; reg = <0x00020000 0x00020000>; };
partition@2 { label = "SPL3"; reg = <0x00040000 0x00020000>; };
partition@3 { label = "SPL4"; reg = <0x00060000 0x00020000>; };
partition@4 { label = "U-boot"; reg = <0x00080000 0x001e0000>; };
partition@5 { label = "environment"; reg = <0x00260000 0x00020000>; };
partition@6 { label = "Kernel"; reg = <0x00280000 0x00500000>; };
partition@7 { label = "File-System"; reg = <0x00780000 0x0F880000>; }; }; }; };
В файл am33xx.dtsi добавил: CODE ocp { .... gpmc: gpmc@50000000 { compatible = "ti,am3352-gpmc"; ti,hwmods = "gpmc"; /*reg = <0x50000000 0x01000000>;*/ reg = <0x50000000 0x2000>; interrupts = <100>; gpmc,num-cs = <7>; gpmc,num-cs = <8>; gpmc,num-waitpins = <2>; #address-cells = <2>; #size-cells = <1>;
status = "disabled"; }; elm: elm@48080000 { reg = <0x48080000 0x2000>; interrupts = <4>; /*compatible = "ti,am3352-elm";*/ ti,hwmods = "elm"; status = "disabled"; };
}
Также в этом файле пришлось отключить(закоментировал) mmc2 и mmc3. Иначе при попытке смуксить пины на NAND ядро паниковало. В настройках ядра включено все, что связано с NAND и присущему ему файловыми системами. В системе появилось устройство /dev/ubi_ctrl, однако при попытки приатачить его получаю ошибку: root@am33:~# ubiattach /dev/ubi_ctrl -m 2 ubiattach: error!: cannot attach mtd2 error 19 (No such device) У кого есть соответствующий опыт, помогите. Как включить NAND? P.S.: Уважаемые модераторы, может быть имеет смысл слить с темой "DS1338. AM33xx. Linux-3.8.13. Device Tree." ?
--------------------
|
|
|
|
|
 |
Ответов
|
Feb 19 2014, 08:33
|

Частый гость
 
Группа: Свой
Сообщений: 132
Регистрация: 10-10-07
Из: Новосибирск
Пользователь №: 31 229

|
Спасибо, 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 содержит: CODE
# # 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: CODE #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: Причина редактирования: добавил конфигурацию.
Сообщение отредактировал shamrel - Feb 19 2014, 09:45
--------------------
|
|
|
|
|
Feb 19 2014, 11:10
|
Знающий
   
Группа: Участник
Сообщений: 959
Регистрация: 11-01-06
Из: Санкт-Петербург
Пользователь №: 13 050

|
Цитата(shamrel @ Feb 19 2014, 12:33)  Сейчас загрузиться получается с uSD, но на серийном устройстве ее не будет. Нужно все действия выполнять под u-boot. у меня коллеги решили эту проблему - комплект бинарников на "юсб флешке", которая втыкается в прибор.. прибор включаем, с флешки грузится технологическая прошивка, которая шьет боевую.. далее ребут и в бой.. тоже бились над проблемой расположения и свойств ECC и технологией ubinize (вроде правильно написал).. имхо, начните с малого - попробуйте отключить дефайнами контроль ECC в юбуте и в ядре.. в доках на ядро есть файл, где описан механизм для нанда (Documentation/mtd/nand_ecc.txt), почитайте.. кстати, вы перед записью из юбута или линукса нанд трёте в области для записи? а то мало ли забыли..
|
|
|
|
Сообщений в этой теме
shamrel Linux-3.8.13. Device Tree. Feb 12 2014, 04:53 Jury093 Цитата(shamrel @ Feb 12 2014, 08:53) В на... Feb 12 2014, 09:48 shamrel Цитата(Jury093 @ Feb 12 2014, 12:48) пере... Feb 13 2014, 03:15  Jury093 Цитата(shamrel @ Feb 13 2014, 07:15) В то... Feb 13 2014, 09:54   shamrel Цитата(Jury093 @ Feb 13 2014, 12:54) т.е.... Feb 14 2014, 03:24   shamrel Цитата(Jury093 @ Feb 13 2014, 12:54) тогд... Feb 17 2014, 07:15    Jury093 Цитата(shamrel @ Feb 17 2014, 11:15) ... ... Feb 17 2014, 07:59 shamrel RE: Linux-3.8.13. Device Tree. Feb 18 2014, 07:22 Jury093 Цитата(shamrel @ Feb 18 2014, 11:22) Може... Feb 18 2014, 09:33
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|