各位前輩大家好:
小弟最近在做Android的移植,使用的開發版是PXA270
今天小弟跟同學在做config檔的選項時(使用的是make xconfig), 其中將Boot Options 改為以下:
=> Default kernel command string : root=/dev/mtdblock2 rootfstype=jffs2 console=ttyS0,115200 mem=64M
由於我的開發版原始的filesystem是放在flash裡,所以root=/dev/mtdblock2, 但這是因為版子原本的filesystem比較小,所以廠商把它放在flash裡 ,小弟今天跟同學將這些選項選好後,編譯出來的zImage放到CF卡開機(我們的版子已經改為將kernel放在CF卡,bootloader會去讀CF卡裡面的kernel) ,開機後一切都正常,配合版子原本的filesystem可以進入到版子的Linux系統,到目前為止(kernel是google提供的 版本是2.6.27 ; 而filesystem則是版子原本的) 現在的問題是:因為Android的filesystem太大(我們使用的是網路下載的armv4裡的filesystem), 塞不進flash裡(PXA270的flash只有64M,裡面分為三區:(1)bootloader (2)kernel [舊的kernel,已不使用] (3)filesystem), 所以我們想要把filesystem放在CF卡裡, 這樣子,root=/dev/mtdblock2 這一段勢必做改變, 假如我們要放在CF卡裡,那root要怎麼改? root=/dev/?????
小第再補問一個問題, 使用網路上下載的armv4裡的filesystem可以嗎? 還是說要自己編譯??
以上兩個問題,希望各位前輩能夠幫小弟解惑,感激不盡!!
4 則回應
我說的 SDK 就是你說的 source code.
out/target/product/nfs/root/* 和 out/target/product/nfs/system 這些就是基本的可以執行 Android 的 filesystem.
如果你要用自己 download 的 filesystem.
(當然前題是你 download 的 filesystem 要是你的 CPU 可以跑的。
如果不行, 你的開發板應該有附 cross-compiler, toolchain, 可以自行 compile.)
1.
假設你的 kernel 有把
CF card support 編入, 那你可以把你的 filesystem 加上 out/target/product/nfs/root/* 和 out/target/product/nfs/system 放在 CF card裡, 把 kernel command line 改成 root=/dev/hda2
正確的話, 系統開起來應該就會 mount /dev/hda2 進到 console mode, 你也就可以 chroot 到自己 download 的 filesystem.
2.
最簡單的方法就是把你的 filesystem copy 到 CF card
kernel command line 維持原來的用 flash 開機,
系統開起來之後, mount CF card , 再 chroot 到
你的 filesystem.
希望對你有幫助。
首先謝謝上面兩位大大的指導!
有個問題想在請教一下michtw大大, 在android source code 裡面有個/out/target/product/nfs/root/init.rc檔,這個檔案是做什麼用的,是用來調整file system之後,才會產生出適合我們自己的file system嗎?
(因為我看有篇文章是寫說, init.rc檔為Android初始化程序的設定檔...在移植時,首先針對硬體平台的實際配置與使用者的需求調整掛載條件. 權限設定,其次將qemu相關的設定取消)以上這兩段話讓小弟我在懷疑,file system的生成是不是照這個檔案裡的流程來跑?
還有 大大您說的"Android SDK make 完,就有你要的 filesystem 了。"這一段話是說,直接把source code 做make之後就有我們要的file system嗎?(為何大大會提到Android SDK?那不是開發套件嗎,跟file system有關係???) 那file system是不是可以做調整,還是說每個人make 出來的file system都一樣?如果要調整是不是靠init.rc這個檔來做調整?
不好意思,問題有點多,不過以上這些問題的確是困擾了小弟我很久了,麻煩有能力的大大們能夠幫幫我! 感激不盡..
各位前輩大家好:
小弟最近在做Android的移植,使用的開發版是PXA270
今天小弟跟同學在做config檔的選項時(使用的是make xconfig), 其中將Boot Options 改為以下:
=> Default kernel command string : root=/dev/mtdblock2 rootfstype=jffs2 console=ttyS0,115200 mem=64M
由於我的開發版原始的filesystem是放在flash裡,所以root=/dev/mtdblock2, 但這是因為版子原本的filesystem比較小,所以廠商把它放在flash裡 ,小弟今天跟同學將這些選項選好後,編譯出來的zImage放到CF卡開機(我們的版子已經改為將kernel放在CF卡,bootloader會去讀CF卡裡面的kernel) ,開機後一切都正常,配合版子原本的filesystem可以進入到版子的Linux系統,到目前為止(kernel是google提供的 版本是2.6.27 ; 而filesystem則是版子原本的) 現在的問題是:因為Android的filesystem太大(我們使用的是網路下載的armv4裡的filesystem), 塞不進flash裡(PXA270的flash只有64M,裡面分為三區:(1)bootloader (2)kernel [舊的kernel,已不使用] (3)filesystem), 所以我們想要把filesystem放在CF卡裡, 這樣子,root=/dev/mtdblock2 這一段勢必做改變, 假如我們要放在CF卡裡,那root要怎麼改? root=/dev/?????
小第再補問一個問題, 使用網路上下載的armv4裡的filesystem可以嗎? 還是說要自己編譯??
以上兩個問題,希望各位前輩能夠幫小弟解惑,感激不盡!!
1.
CF 卡,在 Linux 下是跟硬碟一樣的,就是 /dev/hda1
所以,假設你的 CF 卡切成兩個 partition , /dev/hda1 & /dev/hda2
假設 zImage 放在 hda1, root filesystem 放 hda2, 那你的 kernel command line 應該改成 root=/dev/hda2
2.
既然你是作 Android porting ,那你應該是有 Android SDK
make 完,就有你要的 filesystem 了。
PXA270 不是ARM11?
你怎麼會用ARM4的FS?自己抓sorce rebuild
另外你要先確認你的Kernel 抓到CF card device,假如可以抓到的話一般有可能是
/dev/sd? 這種,你可以先用原先fs進入系統,再插入CF card用下面的指令確認kernel到底有無get device。
#dmesg