Загрузка Андроида с помощью Uboot
Сборник вопросов связанных с Uboot и Андроидом
Пока все в кучу, а там видно будет
Текущие проблемы мешающие загрузке
- tegra_otg_init вешает систему при запуске
- можно обойти отключив otg в board-paz00 патч тут https://www.gitorious.org/~marvin24/ac100/marvin24s-kernel/commit/ed592756cc9807ea778eeff0e4c31d75cec67766
- После такого отключения падает в корку дальше когда adbd стартует http://pastebin.com/mmy8WZrU
- нужно попробовать патч http://marc.info/?l=linux-usb&m=136203353205291&w=2
- Попробовал вот креш с ним http://pastebin.com/NSZ9SuBN
- есть еще вот такой, выглядит более подходящим для 3.1 https://github.com/greenduck/trimslice-android-kernel/commit/fc7b1de8f1b04fa06bcfdebc022bfb5a04503eee
- этот патч уже есть в 3.1, не помогает
- можно обойти отключив otg в board-paz00 патч тут https://www.gitorious.org/~marvin24/ac100/marvin24s-kernel/commit/ed592756cc9807ea778eeff0e4c31d75cec67766
- Висяк с тем что не находится root= и init=
- При использовании uboot не распаковывается initrd - включение CONFIG_INITRD_TAG исправляет ситуацию (логи fastboot, uboot, uboot fixed).
- tegra_dvfs: rate 666000000 too high for dvfs on ...
- Лечится включением TEGRA_PREINIT_CLOCKS в ядре
- rcu_sched_state detected stall on CPU 1
При использовании ядра в котором еще нет tegra_udc и используется freescale udc драйвер
- Ядро виснет при исполнении функции tegra_init_early в arch/arm/mach-tegra/common.c, при запуске tegra_clk_init_from_table(common_clk_init_table);
- Т.к. никаких упсов или стеков не выдает, не очень понятно в чем дело
- Методом вливания по одному патчей из более нового бранча, найден виновник https://gitorious.org/~marvin24/ac100/marvin24s-kernel/commit/8fbd140659857935fab495332e71b99486792b21
- Т.к. никаких упсов или стеков не выдает, не очень понятно в чем дело
- Теперь не хватает похоже некого gr3d клока
- Теперь андроид грузится из юбута, в логе много софткрешей и мусора
Test drive
- Накатить через рековери систему собраную для теста http://dl.dropbox.com/u/32472722/uboot/cm_ac100-ota-eng.zombah.zip
- Скачать набор uboot для внешней сдкарты fat32, тут http://dl.dropbox.com/u/32472722/uboot/boot.tar.gz
- Бутнуть тошу в рековери режим
- Вставить заряженую сд карту
- Бутнуть тошу коммандой nvflash --bl ./u-boot-dtb-tegra.bin --go , заряженный бутлоадер лежит внутри boot.tar.gz
- Смотреть в консоль
Загрузка штатного ядра и рамдиска юбутом
Можно не выносить ядра и рамдиск на отдельный носитель, а читать их с диска прям самим юбутом:
mmc dev 0 mmc read 0x1000000 0x3404 0x12ac mmc read 0x2200000 0x46b0 0x150 bootz 0x1000000 0x2200000
Инфа из разных мест о работе uboot с android
- лог загрузки wm8650 http://pastebin.com/wNm3iC34
- лог обновления прошивки через юбут на wm8650 http://pastebin.com/SG6wXrFf
- boot.scr от самсунга
setenv android_cmd loglevel=4 console=ram sec_debug.enable=0 sec_debug.enable_user=0 sec_log=0x100000@0x4d900000 s3cfb.bootloaderfb=0x5ec00000 ld9040.get_lcdtype=0x2 consoleblank=0 lpj=3981312 vmalloc=144m; if test $sgs2_bootmode_val -eq 1; then setenv android_cmd ${android_cmd} bootmode=2; fi setenv bootargs ${android_cmd} setenv devtype mmc setenv devnum 0 setenv kernel_part 0xb setenv kernel_name /boot/android.uimg setenv loadaddr 0x4EF08000 echo Load Address:${loadaddr}; echo Cmdline:${bootargs}; if fatload ${devtype} ${devnum}:${kernel_part} ${loadaddr} ${kernel_name}; then bootm ${loadaddr}; exit 0; elif ext2load ${devtype} ${devnum}:${kernel_part} ${loadaddr} ${kernel_name}; then bootm ${loadaddr}; exit 0; else echo failed to boot custom image; fi
- Нужно описание нашего emmc на тему юбута, типа где начинается бут лоадер, где ядро, где инитрд. А то разбирают сомнения, нужно упорядочить инфу в одной таблице.
- Пример бутменю в юбуте http://talk.maemo.org/showthread.php?t=81613
- Описание передачи ключей от андроидного ребута ядру http://stackoverflow.com/questions/5472761/how-does-the-bootloader-pick-up-the-command-after-a-restarting-system-with-comm
- Нужно чтоб была возможность ребутаться в меню или в рековери сразу из системы
- Репо нуковского девайс три андроидного который собирается под юбут https://github.com/NookieDevs/android_device_bn_encore
Загрузка cm-10 beta4 u-boot'ом
Boot Kernel size = 2580708 Boot Initrd size = 170677 Recovery Kernel size = 2580708 Recovery Initrd size = 1859967
Boot Kernel offset: start = 5376 + 1 = 5377 - 2048 = 3329 x 4=13316 (0x3404) (для 32гб модели) size = 2580708 + 2048 = 2582756 - 1 = 2582755 / 2048 = 1261 x 4 = 5044 (0x13b4)
Boot Initrd offset: start = 0x3404 + 0x13b4 = 0x47b8 size = 170677 + 2048 = 172725 / 2048 = 84 x 4 = 336 (0x150)
mmc read 0x1000000 0x3404 0x13b4 mmc read 0x2200000 0x47b8 0x150
Recovery Kernel offset: start = 2816 + 1 = 2817 - 2048 = 769 x 4 = 3076 (0xc04) (для 32гб модели) size = 2580708 + 2048 = 2582756 - 1 = 2582755 / 2048 = 1261 x 4 = 5044 (0x13b4) (в андроиде в рековери у нас пока ядро тоже что и бут имидже)
Recovery Initrd offset: start = 0xc04 + 0x13b4 = 0x1fb8 size = 1859967 + 2048 = 1862015 / 2048 = 909 x 4 = 3636 (0xe34)
mmc read 0x1000000 0xc04 0x13b4 mmc read 0x2200000 0x1fb8 0xe34
Добавляем функции в u-boot
diff --git a/include/configs/paz00.h b/include/configs/paz00.h index b0c6ff4..85bf5cc 100644 --- a/include/configs/paz00.h +++ b/include/configs/paz00.h @@ -80,6 +80,35 @@ #define CONFIG_SYS_I2C_INIT_BOARD 1 #define CONFIG_TEGRA_NVEC 1 +/* Support kernel 3.1 initrd */ +#define CONFIG_INITRD_TAG 1 + +#define PAZ00_DEVICE_SETTINGS \ + "legacybootkernelstart=0x3404\0" \ + "legacybootkernelsize=0x13b4\0" \ + "legacybootinitrdstart=0x47b8\0" \ + "legacybootinitrdsize=0x150\0" \ + "legacybootkernelmemoffset=0x1000000\0" \ + "legacybootinitrdmemoffset=0x2200000\0" \ + "legacyrecoverykernelstart=0xc04\0" \ + "legacyrecoverykernelsize=0x13b4\0" \ + "legacyrecoveryinitrdstart=0x1fb8\0" \ + "legacyrecoveryinitrdsize=0xe34\0" \ + "legacymmcdev=mmc dev 0\0" \ + "legacyboot=${legacymmcdev};" \ + "mmc read ${legacybootkernelmemoffset} " \ + "${legacybootkernelstart} ${legacybootkernelsize};" \ + "mmc read ${legacybootinitrdmemoffset} " \ + "${legacybootinitrdstart} ${legacybootinitrdsize};" \ + "bootz ${legacybootkernelmemoffset} ${legacyinitrdmemoffset}\0" \ + "legacyrecovery=${legacymmcdev};" \ + "mmc read ${legacybootkernelmemoffset} " \ + "${legacyrecoverykernelstart} ${legacyrecoverykernelsize};" \ + "mmc read ${legacybootinitrdmemoffset} " \ + "${legacyrecoveryinitrdstart} ${legacyrecoveryinitrdsize};" \ + "bootz ${legacybootkernelmemoffset} ${legacyinitrdmemoffset}\0" \ + "" + #include "tegra-common-post.h" #endif /* __CONFIG_H */ diff --git a/include/configs/tegra-common-post.h b/include/configs/tegra-common-post.h index 222de86..2392c1d 100644 --- a/include/configs/tegra-common-post.h +++ b/include/configs/tegra-common-post.h @@ -150,7 +150,8 @@ #define CONFIG_EXTRA_ENV_SETTINGS \ TEGRA_DEVICE_SETTINGS \ MEM_LAYOUT_ENV_SETTINGS \ - BOOTCMDS_COMMON + BOOTCMDS_COMMON \ + PAZ00_DEVICE_SETTINGS #if defined(CONFIG_TEGRA20_SFLASH) || defined(CONFIG_TEGRA20_SLINK) || defined(CONFIG_TEGRA114_SPI) #define CONFIG_FDT_SPI