日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android NFS文件系统挂载遇到的问题解决方法

發布時間:2024/9/3 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android NFS文件系统挂载遇到的问题解决方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在網上他人博客中方法都大同小異,但是卻無法解決我遇到的問題。

我隨意挑選一個網友的方法http://blog.csdn.net/zjg555543/article/details/7792984

當然我的虛擬機的NFS是配置好的,Linux掛載沒有問題。

這里我就不詳細說明網上存在的相同的東西了,主要是要注意Android的nfs文件系統與Linux不一樣,構建Android的文件系統需要Android編譯源碼out板級目錄下的三個文件夾的文件(/out/target/product/***/),即root、data、system。

看下面三條命令

$cp -rf $OUTPUTDIR/root/* /nfsroot??

$cp -rf $OUTPUTDIR/system /nfsroot

$cp -rf $OUTPUTDIR/data /nfsroot

由上面三條命令拷貝文件到nfsroot目錄下即可,這里一定要注意第一條的拷貝,并非拷貝root文件夾,而是拷貝root目錄下的所有文件。


可以確定我的nfs服務器,目錄的構建都沒有問題,可是死活起不來。網上還有說修改init.rc文件的,可是修改還需要對Android源碼做操作,就沒干。

雖然說網上說修改init.rc的方法我沒用,但是給我提供了思路。Linux內核起來后會加載ramdisk文件,把該文件下的所有文件拷貝到文件系統中,而init.rc就在里面,內核會去加載它,做一些初始化的工作,其中就有對系統目錄的操作,進而決定使用的根文件系統位置。

存在加載ramdisk.img時的情況如下:

[ ? ?2.704625] dm9000 dm9000: eth0: link down
[ ? ?2.707371] ADDRCONF(NETDEV_UP): eth0: link is not ready
[ ? ?2.889699] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ ? ?2.904730] IP-Config: Complete:
[ ? ?2.906471] ? ? ?device=eth0, addr=192.168.1.21
[ ? ?2.910836] dm9000 dm9000: eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1
[ ? ?2.917844] , mask=255.255.255.0, gw=192.168.1.1,
[ ? ?2.922244] ? ? ?host=192.168.1.21, domain=, nis-domain=(none),
[ ? ?2.928158] ? ? ?bootserver=192.168.1.22, rootserver=192.168.1.22, rootpath=
[ ? ?2.935580] Freeing init memory: 192K
[ ? ?2.950182] init: could not import file /system/etc/init.local.rc
[ ? ?2.955826] init: /init.smdkv210.rc: 93: invalid command 'rmmod'


由上分析發現,在內核加載完init.rc對于nfs的掛載設置就給忽略了,這可以說明,在init.rc文件中對根文件系統做了設置,而且覆蓋傳遞給內核的nfs的設置參數,進而雖然nfs設置正確也無法掛載。

既然加載ramdisk.img會影響nfs的掛載,那么把它刪了就好了??梢园阎按娣旁撐募目臻g擦除即可,這么做之后成功掛載了。成功掛載后打印的應該是下面的信息:

[ ? ?2.684659] dm9000 dm9000: eth0: link down
[ ? ?2.687409] ADDRCONF(NETDEV_UP): eth0: link is not ready
[ ? ?2.889733] ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[ ? ?2.904765] IP-Config: Complete:
[ ? ?2.906504] ? ? ?device=eth0, addr=192.168.1.21
[ ? ?2.910869] dm9000 dm9000: eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1
[ ? ?2.917878] , mask=255.255.255.0, gw=192.168.1.1,
[ ? ?2.922277] ? ? ?host=192.168.1.21, domain=, nis-domain=(none),
[ ? ?2.928317] ? ? ?bootserver=192.168.1.22, rootserver=192.168.1.22, rootpath=
[ ? ?2.945327] VFS: Mounted root (nfs filesystem) on device 0:11.


由此延伸,發現這個ramdisk的加載與u-boot有關,我的板子是realarm210的EMMC版本。默認的加載內核環境變量是:

setenv bootcmd "movi read kernel 30008000;movi read rootfs 40800000 180000;bootm 30008000 40800000"

可以看到會有rootfs的加載,這時如果把rootfs給刪掉呢,是不是ramdisk.img在emmc中就不用刪除了,該成的命令如下:

setenv bootcmd "movi read kernel 30008000;bootm 30008000"


回頭試試。


已測試了,修改u-boot參數也是可行的。這里記錄一下,網友遇到這類問題時可參考一下。



修正上面的一個問題,關于init.rc的。

看來還是需要修改該文件的,不同開發板,不同的Flash恐怕都要修改該文件。

具體如下:

主要是下圖所示的位置:


下面紅框是Android默認的,上面的紅框是開發板添加,由于要使用nfs,所以都要給注釋掉。

原因是:系統默認是掛載的是emmc的ext4分區,如果不注釋掉,那么訪問的system目錄并非構建的根文件系統下的system文件。

不注釋上圖的代碼是情況如下:

開發板的system信息如下:


而nfs文件系統的system信息如下:



明顯不一樣,這就說明了問題,當然注釋掉之后就沒問題了。


到此,該問題已經解決了。

總結

以上是生活随笔為你收集整理的Android NFS文件系统挂载遇到的问题解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。