Pull to refresh

Comments 31

Браво! Результат достойный настоящего исследователя!

По поводу перепрошивки nand — может там физически какая-нибудь ножка блокировки микросхемы подтянута?
Спасибо!

Да не, такого не может быть, скорее всего проблемы в конфигурировании какие-то, на уровне драйверов ядра. Так как ядро и dtb нормально записываются и загружаются с nand (первое видео), а проблемы с rootfs и u-boot. При чём разок-то rootfs стартануло.
Вот кстати да, ткнуться осциллом на ножку WP_n флехи было бы крайне полезно.

В загрузчике printenv что показывает?
Еще не нравится badblock в нулевом секторе nand. По идее можно очистить информацию о бэдблоках при помощи команды в загрузчике nand scrub.chip.

В загрузчике printenv что показывает?


#define CONFIG_MFG_ENV_SETTINGS \
	"mfgtool_args=setenv bootargs " \
		BOOTARGS_CMA_SIZE \
		"rdinit=/linuxrc " \
		"g_mass_storage.stall=0 g_mass_storage.removable=1 " \
		"g_mass_storage.file=/fat g_mass_storage.ro=1 " \
		"g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF "\
		"g_mass_storage.iSerialNumber=\"\" "\
		MFG_NAND_PARTITION \
		"clk_ignore_unused "\
		"\0" \
	"initrd_addr=0x86800000\0" \
	"initrd_high=0xffffffff\0" \
	"bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};\0" \


Отсюда.
Я не совсем корректно указал. Суть в том, что переменные среды окружения разные при загрузки nand или ramfs:

#if defined(CONFIG_NAND_BOOT)
#define CONFIG_EXTRA_ENV_SETTINGS \
	CONFIG_MFG_ENV_SETTINGS \
	"panel=PRIMELCD\0" \
	"fdt_addr=0x83000000\0" \
	"fdt_high=0xffffffff\0"	  \
	"console=ttymxc0\0" \
	"bootargs=console=ttymxc0,115200 ubi.mtd=4 "  \
		"root=ubi0:rootfs rootfstype=ubifs "		     \
		BOOTARGS_CMA_SIZE \
		"mtdparts=gpmi-nand:4m(boot),8m(kernel),1m(dtb),1m(misc),-(rootfs)\0"\
	"bootcmd=nand read ${loadaddr} 0x400000 0x800000;"\
		"nand read ${fdt_addr} 0xc00000 0x100000;"\
		"bootz ${loadaddr} - ${fdt_addr}\0"

#else


Я вот прям сейчас не могу скинуть результат вывода printenv. Как доберусь до калькулятора, покажу.

Да, это понятно. Мое предположение, что могло быть несоответствие между разметкой, которая передается загрузчиком ядру и адресом куда заливается rootfs. Но вроде как несоответствия нет.
Еще может быть, что ядро собрано без поддержки gpmi-nand контроллера или же без поддержки ubi. Также, если правильно помню, не очень хорошо заливать раздел ubifs из под линукса, если это делать через загрузчик, то он автоматически помечает бэдблоки, что уменьшает проблемы

Всё было бы так, если бы у меня не было однократной удачной загрузки. Вероятнее всего там какая-то гонка драйверов в ядре, и поэтому с некоторой вероятностью удаётся загрузиться.
Обещал показать printenv

baudrate=115200
bootargs=rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.file=/fat g_mass_storage.ro=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber= mtdparts=gpmi-nand:4m(boot),8m(kernel),1m(dtb),1m(misc),-(rootfs) clk_ignore_unused
bootcmd=nand read ${loadaddr} 0x400000 0x800000;nand read ${fdt_addr} 0xc00000 0x100000;bootz ${loadaddr} — ${fdt_addr}
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
bootdelay=0
console=ttymxc0
fdt_addr=0x83000000
fdt_high=0xffffffff
initrd_addr=0x86800000
initrd_high=0xffffffff
loadaddr=0x80800000
mfgtool_args=setenv bootargs rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.file=/fat g_mass_storage.ro=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber="" mtdparts=gpmi-nand:4m(boot),8m(kernel),1m(dtb),1m(misc),-(rootfs) clk_ignore_unused
panel=PRIMELCD

Environment size: 1004/8188 bytes


Из любопытного, при загрузке в rootfs fsl-image-mfgtool-initramfs-imx_mfgtools.cpio.gz.u-boot mtd4 видит, а так не видит.
unable to create a temporary file
— это относится к вашему хосту или к калькулятору? Если к калькулятору — может там tmpfs не хватает?
Попробуйте запустить
strace kobs-ng init -x -v --chip_0_device_path=/dev/mtd0 /tmp/u-boot-dtb.imx
Сильно.
Вот бы еще кто про dts так разжевал. А то возимся тут с одной железкой наощупь.
Да, в нашем сегменте не хватает хорошей статьи о том, как писать dts…
Даже себе не мог представить что такое можно сделать с калькулятором. Месье, ваш труд не будет забыт.

Очень классно! Я думаю, что к этим двум статьям нужна ещё одна — типа подводка. В таком плане: "Часто в новостях можно читать, что удалось установить Линукс на XXX-устройство. Каким образом это делается? Какие основные этапы установки и какие сложности при этом возникают возникают? Как их можно разрешить? В этой статье. В следующих разберём установку Линукса на калькулятор HP". В общем, нужна предварительная интрига, затем общее объяснение фокуса, а затем сам фокус.

Я учту ваши пожелания в будущем :). Делается полный реверс устройства, потом разрабатываются драйвера :).
Если линукс установлен, то накатить винду на qemu проблем уже нет.
Господи, за что… Будем считать, что я этого не видел
Не, не, не!
Видел видел!

Так что надо будет как минимум попробовать.
Только если я буду не одинок в своих проблемах. Надо бы сообщество организовывать.

Неужели для калькулятора действительно нужно железо, которое может тянуть винду?..

Большой дисплей, графика… Железо, которое с трудом будет вытягивать только эту задачу, обойдется не дешевле.

Ой, да это ж разве большой… Осциллографы с таким экраном на stm32f1 делают (64КБ флэша, ядро Cortex М). Не знаю, парвда, что там за графика в этом калькуляторе, может, и правда что-то суперское.

Не сильно дешевле, я имел в виду. Да, почти полноценный полноценный комп получается немного дороже (по железу), зато дешевле по софту (бесплатный linux — куда уж дешевле) и по стоимости разработки.
И грузиться вечность на этом конфиге )))

Осталось сделать эмулятор МК-61 для этой ЭКВМ, ну и за одно эмуляторы других ПМК, например Hewlett-Packard HP 35S или ещё каких. А то нафига!

Sign up to leave a comment.