RkUtils
https://github.com/naobsd/rkutils
編譯
# gcc rkcrc.c -o rkcrc # gcc rkunpack.c -o rkunpack ... # cp rkunpack /usr/local/bin/ ...
Unpack
# rkunpack boot.img unpacked ...
1. rkunpack boot.img so I have a boot.img-raw
# rm -rf unpacked-boot; mkdir -p unpacked-boot; cd unpacked-boot
2. Create an empty folder and cd into it: mkdir unpacked-boot; cd unpacked-boot
# cat ../boot.img-raw | gunzip | cpio -i 3395 blocks
3. extract contained cpio: cat ../boot.img-raw | gunzip | cpio -i ; now you can modify that file system.
Pack
# find . | cpio -o -H newc | gzip > ../boot-new.img ; cd .. 3395 blocks
# rkcrc -k boot-new.img boot.img
參考資料
http://linux-rockchip.info/mw/index.php?title=Rkutils
http://www.imajeenyus.com/computer/20130301_android_tablet/android/unpack_repack_recovery_image.html
http://pete.akeo.ie/2013/10/compiling-and-running-your-own-android.html
http://linux-rockchip.info/mw/index.php?title=Building_Kernel_for_Linux_Distribution
http://www.gizfun.com/content/unpack-and-pack-rockchip-bootimg-image-%EF%BC%88rk3066rk3188
https://www.oschina.net/question/54100_27733
http://rockchip.wikidot.com/linux-user-guide
http://stackoverflow.com/questions/11012556/border-over-a-bitmap-with-rounded-corners-in-android
https://developer.ridgerun.com/wiki/index.php/How_to_use_GPIO_signals
http://stackoverflow.com/questions/34808276/poll-on-raspberry-gpio-sysfs-raspberry
http://flykof.pixnet.net/blog/post/27927242
http://users.ece.utexas.edu/~valvano/Volume1/E-Book/
https://www.win.tue.nl/~aeb/linux/fs/fat/fat-1.html
http://thestarman.pcministry.com/asm/mbr/PartTables.htm
https://www.kernel.org/doc/Documentation/timers/timers-howto.txt
http://www.zophar.net/fileuploads/2/10614uauyw/Genesis_ROM_Format.txt
http://sunylin.pixnet.net/blog/post/91130590
http://givemepass.blogspot.tw/
http://www.cnblogs.com/HQMIS/archive/2013/01/28/2880567.html
https://www.codeproject.com/Tips/788752/Android-on-Visual-Studio
https://downloads.puresoftware.org/files/android/SDK/
https://github.com/rockchip-linux/kernel/blob/release-4.4/arch/arm/configs/rk3036_defconfig
瞭解 Rockchip Misc.img 的作用
Cpu 上電之後, 啟動 bootloader, (即是RK29xxLoader(L)_V2.08.bin) , 就會讀取 MISC 分區第一塊内容, 決定進入 recovery 模式或是升级基帶 Baseband Processor (BP) 或做其它事情. 而更改 MISC 内容的操作為按下某個按键或用户設置系统.
參考資料:
- http://developer.t-firefly.com/thread-11543-1-1.html
- http://bbs.t-firefly.com/forum.php?mod=viewthread&tid=223
- http://blog.csdn.net/o0avalon0o/article/details/53526742
- http://blog.csdn.net/conowen/article/details/7251886
- https://github.com/jollen/android-ota/blob/master/README.md
- http://blog.csdn.net/bobcat_kay/article/details/76984607
- https://github.com/avionbg/imito/tree/master/rockchip-3.0-rbox-kk-3.0.36%2B
BCB 3 個區塊:
BCB , RC (Recovery Console) 與 bootloader 共用 /misc 分區; 這個分區 (partition) 存放一種稱為 Bootloader Control Block (BCB) 的資料; 這 BCB 分為 3 個區塊:
-
BCB.command[32]: 給 bootloader 的 command.
-
BCB.status[32]: bootloader 回傳的 status.
-
BCB.recovery[1024]: RC 的 command line.
-
BCB.command 裡的資料, 是由 Linux kernel 所寫入, 基本上是一行 'boot-recovery' (MAGIC) 命令; 另外, Linux kernel 也要將 BCB.recovery 清空. BCB.command 是 bootloader 選擇 Boot Image 的依據. 也有廠商用來實作 Dual OS 開機.
# hexdump -C Image/misc.img 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00004000 62 6f 6f 74 2d 72 65 63 6f 76 65 72 79 00 00 00 |boot-recovery...| 00004010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00004040 72 65 63 6f 76 65 72 79 0a 2d 2d 77 69 70 65 5f |recovery.--wipe_| 00004050 61 6c 6c 00 00 00 00 00 00 00 00 00 00 00 00 00 |all.............| 00004060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00400000
# hexdump -C /dev/block/rknand_misc 00000000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00400000
# (echo -n boot-recovery | busybox dd bs=16k seek=1 conv=sync; busybox dd if=/dev/zero bs=16k count=1) > /dev/block/rknand_misc # hexdump -C /dev/block/rknand_misc ... # (echo -n "boot" | busybox dd bs=16k seek=1 conv=sync; busybox dd if=/dev/zero bs=16k count=1) > /dev/block/rknand_misc # hexdump -C /dev/block/rknand_misc ... # (echo -n "" | busybox dd bs=16k seek=1 conv=sync; busybox dd if=/dev/zero bs=16k count=1) > /dev/block/rknand_misc # hexdump -C /dev/block/rknand_misc ...
-
android→ubuntu: 向 misc 分區寫入 boot-recovery 標誌.
-
ubuntu→android: 清空 MISC 分區的内容.
-
1.MiniLoader(RK) 依據 parameter 檢查 recover 按键電平或是 AD值, 來更改CPU 暫存器, 提醒 Uboot 是否需要進入 recovery 模式:
-
1.1 如果 recovery 按鍵被按下, 而且 usb 被接入, 則直接進入 loader rockusb 升級模式.
-
1.2 如果 recovery 按鍵被按下, 没有接 usb, 則修改 CPU 暫存器, 提醒 uboot 尋找 recovery.img .
-
1.3 如果 combination 按鍵被按下, 則修改 CPU 暫存器, 提醒 uboot 尋找 recovery.img .
-
-
2.MiniLoader 完成重定向之後, 控制權轉交 Uboot :
-
2.1 Uboot 通過檢查 CPU 暫存器或者 misc 中的配置, 如果有 recovery 要求, 則進入恢復模式 4 .
-
-
3.加載 boot 分區:
-
3.1 如果 boot 中同時含有 kernel 和 initramfs(initrd.img), 則分别加載到内存特定位置, 跳轉至 3.4 (跳過加载kernel.img) .
-
3.2 如果 boot 中只有initramfs (initrd.img), 或者boot.img 是 RK 格式 (直接编译 Android SDK默认选项, 產生的 boot.img 鏡像, 只包含initrd.img, 不支持 OTA, 需使用
# ./mkimage.sh ota
重新產生才可支持 OTA), 則只加載 ramdisk 到内存. -
3.3 加載 kernel 分區到内存.
-
3.4 跳轉到 4 .
-
-
4.急救模式:
-
4.1 讀出 recover 分區中的 kernel 與 initramfs (initrd.img) 到内存後跳轉到 5 .
-
-
5.初始化 kernel , 分析啟動参數, 掛載 ramdisk, 執行 ramdisk 中 /sbin/init (新) 或者 /init (舊), 重新掛載 rootfs, 將控制權交給 rootfs (Ubuntu 之類) .
Email: jasonc@mail2000.com.tw
留言列表