close


 

 

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://charleslin74.pixnet.net/blog/post/457599419-%5bandroid%5d-android%E6%93%B7%E5%8F%96%E9%8F%A1%E9%A0%AD%E9%8C%84%E5%BD%B1%E4%B8%A6%E5%88%A9%E7%94%A8ffmpeg-rtmp%E8%BC%B8?pixfrom=related 
 

http://falldog7.blogspot.tw/

 

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/Nu3001/rktools/blob/master/windows/AndroidTool_Release_v2.1/rockdev/recover-script

 

https://github.com/rockchip-linux/kernel/blob/release-4.4/arch/arm/configs/rk3036_defconfig

 

 

 

 

 

black_dot.jpg

 

 

瞭解 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 之類) . 
     

 

 

 

 

 

 

 

 

 

 

rk_wiki.png
 

Email: jasonc@mail2000.com.tw

 

 

 

 

 

arrow
arrow
    創作者介紹
    創作者 Lexra 的頭像
    Lexra

    Lexra Pixnet

    Lexra 發表在 痞客邦 留言(0) 人氣()