Q&A

Q: 請問在編譯時,若是發生mkimage的錯誤?
A: 可能是因為該mkimage是在x86-64的環境編譯產生,若是使用x86-32為開發環境,可以下載http://www.mask.org.tw/data/mkimage.
Q: 請問使用Android的ToolChain來compile BusyBox(v1.15)時,需要什麼設定嗎?
A: 如果是使用我所提供的開發環境,應該是不需要任何設定,因為我在Makefile中會幫你處理這個部份,但是如果是部份使用我的,部份使用他人的,可能需要額外的設定,而額外設定的部份可能要視個人的情況而定.
Q: 請問當使用U-BOOT開機、Load Android Kernel、BusyBox之後,發生停留在"Freeing init memory:144K Wanring:Unable to open an initial console",
請問這是因為BusyBox內沒有配置好Android需要的檔案的緣故嗎?還是可能因為Build BusyBox用的cross toolchain版本(gcc-3.4.1)與Android不一致的緣故?
A: 如果想要直接執行Android的init的話,可以先試試看是否需要修改init.rc,反之可能要確定root file system是完整且可以開機,不管如何在/dev/*都必須為正確,另外整個開發流程及細節可以參考我的論文.
及基本上toolchain要支援EABI, 我的開發環境是使用不同的toolchain,也就是編譯Android的部份是使用原本從Android下載下來的toolchain,而編譯kernel及busybox是使用另一個toolchain,不一致不會影響.
Q: 請問當不直接執行Android的init,是指單純指跑Kernel起來而已嗎?,那麼在這樣的情況下開機後是處於console模式下嗎?
A: 是, 然後進入console mode.
Q: 請問一下使用官網Source code (R1.5),如果在build android時出現下列訊息是因為什麼緣故呢?=================================================target Jar: pm
(out/target/common/obj/JAVA_LIBRARIES/pm_intermediates/javalib.jar)target Java: services
(out/target/common/obj/JAVA_LIBRARIES/services_intermediates/classes)frameworks/base/services/java/com/android/server/WifiWatchdogService.java:1:
unclosed comment/*^1 errormake: ***
[out/target/common/obj/JAVA_LIBRARIES/services_intermediates/classes-full-debug.jar]
Error 41=================================================
A: 根據錯誤訊息,似乎是frameworks/base/services/java/com/android/server/WifiWatchdogService.java
裡面少了或是多了一個comment:/* */.
Q: 請問如果只是要製作 Busy Box,在您的原始碼中可以自動製作嗎?
A: 將下載的busybox放入app的目錄下, 假設busybox目錄名稱為busybox-1.15.1,修改android-pxa270/.config 這個檔案, 裡面有一個可以指定busybox目錄名稱的選項,將它修改為你的目錄,沒有意外的話就可以順利編譯.
如果還是有問題, 也許你下載的busybox須要做少部份的修改, 例如我在app下有放busybox-1.6.?? 這個就是我做了非常少的改動, 為了使之編譯成功.
Q: 請問單獨製作root file system要如何去make?
A: 我為系統準備了一個很小的root file system,在rootfs下有一個檔名為tiny??.tgz,此為一個基本且極小的檔案系統但是不包含busybox, 所以必須將編譯好的busybox放至/bin/下或是正確的位置,如此即為一個embedded system的檔案系統, 沒有意外的話應該可以看見shell prompt.
Q: 請問在Kernel的make menuconfig設定中,Boot options中是設定root=/dev/mtdblock3 rw……,這個root=的設定需要需搭配原本硬體廠商的Boot loader來設定嗎?
A: 在進入kernel之後就與bootloader無關了, 在board.c或是相關檔案會記載mtd partition的劃分方式, boot options中的設定root=/…??? 必須與程式碼中的設定相符, 也就是說在bootloader的boot options設定必須符合board.c的mtd partition的設定.
Q: 請問如果要在一個平台上跑Android,一定需要為他的準備root file system製作Busy Box之類的東西嗎?還是說其實只需要Android的System,Data之類的就可以了!?
A: 我準備一個非常小的檔案系統是希望提供一個像從前開發嵌入式系統的環境, 原則上可以直接執行Android.
Q: 請問使用你的原始檔make之後, 所產生的uImage, rootfs.jffs2及USB fs 這三個檔案會出現在哪裡呢?
A: uImage, rootfs.jffs2及USB fs 這幾個檔案原則上會放在 target 的目錄下, 但是我在target目錄下又建了幾個目錄, bin 是 binary 的意思, 可以直接燒錄的 image 會放在bin下, 至於其他的目錄, 例如 USB fs, 這些應該一目瞭然, 1. mydroid-rootfs 就是編譯出來且可以放至USB中的rootfs, 2. demo-…就是預先編譯好, 可以直接複製至USB中的rootfs, 3. rootfs即為我做的一個極小的檔案系統, 僅作為開機之用.
Q: Now it is something wrong with my file system, and i want to make a minimal rootfs too, but it doesn’t work. would you like to share your ‘rootfs’ for me?
A: There is a named “tiny_rootfs.tgz" in rootfs, it was my minimal rootfs.
Q: 請問在chroot之前的掛載SD card 是在tiny_rootfs裡的哪裡做?
A: 我沒有掛載SD card, 我是用USB隨身碟, 手動下指令掛載, 論文中有:"mkdir /tmp/ooxx", “mount /dev/sd?? /tmp/ooxx", “cd /tmp/ooxx", “chroot .", “/init".
Q: 請問使用android platform build好的三個image直接跑,像root directory的image是ramdisk.img, 格式是用cpio+gzip包起來的那在boot argument下的rootfstype的設定值應該設成哪一種filesystem type?
A: 一般NOR Flash可以用jffs2, NAND Flash可以用yaffs2.如果NOR Flash要用yaffs2, 需要作一些修改但會增加移植的複雜度, 建議可以使用USB隨身碟搭配ext3, 因為android需要mmap file system, jffs2不支援mmap,可以看fs/jffs2/裡面的mmap這個function其實是空的,但是如果用USB隨身碟搭配ext3, 這樣是可行的.
Q: 請問我先將rootfstype設成jffs2,並把root directory用mkfs.jffs2工具pack起來;後來發現這樣它就可以解開root directory,並執行底下的init;但是不知為何在android platform上make的init檔案會無法執行,我有在init.c的main()一開頭點LED燈,來確認它是否有跑進去,但是看起來燈都沒亮; 所以想請問這是否是我的android linux kernel setting有問題還是有可能是其他問題?P.S.我版子上的cpu是ARM926EJ-Sid(ARMv5TEJ指令集).
A: 你可以自己檢查linux kernel configuration, 看看有沒有缺少某些選項沒有被enable, 在使用MMU的情況下, 一般user space是不能直接存取硬體的, 所以你如果直接將kernel的程式碼搬到init.c, 原則上是不能work的.
Q: 請問我之前有check過linux kernel configuration, 不過會發生filesystem程式有問題無法執行應該是跟EABI有關,而此設定應該只需要將Kernel Features->User the ARM EABI to compiler the kernel enable就好了吧!?我的kernel此選項已經設定了,但是filesystem下的init程式還是無法執行!!
A: 我的建議是先開進一般rootfs, 就是有busybox的環境, 再執行/init, 或是用strace /init之類的方式, 來找出發生錯誤的原因.
Q: 請問你的busybox的設定檔可以分享一下嗎?因為我自己build會說找不到init,但用你的可以,可是你的busybox,少了我要的mdev的指令,可以分享一下嗎?
A: 在我公開的程式碼 app/busybox-1.13.2/.config , 即為busybox的設定檔.
Q: 請問要做Android Porting應該要有哪些的基本知識才夠?,所以想問一下應該要具備哪些基礎知識會比較好上手!?
A: 像1.知道如何trace linux kernel, 2.知道linux開機流程, 3.知道如何trace Android source, 4.熟悉linux操作環境, 以上是minimal requirement.如果你是學生(非在職), 要拿移植Android當做專題, 其實不是很容易, 有很多要注意的地方, 移植Android並不困難, 重點是"複雜", 移植Android的過程有點複雜, 我的論文中有寫移植linux kernel for android可能會遇到四,五個問題, 為什麼我這樣寫是因為可能光是移植linux kernel for android, 我就改了上百個檔案, 我無法一一舉例每個檔案應該如何修改, 所以列出幾個大方向, 可能遇到的問題, 以及對應的解決辦法. 為什麼我要公開論文, 一方面也是因為學術單位比較不容易移植android至實際的硬體平台, 所以我希望可以幫助想接觸android的人; 因為我是先工作才回去念研究所, 所以過去的工作經驗對移植android有一定的幫助.
Q: 請問用這build出來的,跟disk-1裡面那個busybox,兩個size不太一樣,用這build出來的一樣會說找不到init,kernel panic還是你那disk-1裡面那個busybox,加個mdev 的指令,build完,再分享給我!?
A: 包含mdev的rootfs,http://www.mask.org.tw/data/rootfs.tgz
Q: 請問我的實際平台為1.0 (kernel + 上層), 找不到1.0版本的SDK, 是否可以用1.5版本?
A: 原則上kernel與上層的關係不像各版SDK中的API版本關係, 相依性比較沒有這麼強烈, 但建議盡量使用相同版本.
舊版Android所發布的SDK載點: http://developer.android.com/sdk/older_releases.html
© 2009 - 2018 Mask. All rights reserved.