通過wifi掛載Android文件系統

一、 步驟

1.       搭建NFS服務器

(1)       安裝

# sudo apt-get install nfs-kernel-server

(2)       配置

# vi /etc/exports,添加一行:

            /share_path ip(rw,sync,no_root_squash)

           Eg.  /home/ubuntu/nfsroot 192.168.1.*(rw,sync,no_root_squash)

(3)       重啓NFS

# sudo /etc/init.d/nfs-kernel-server restart

(4)       測試

# mount pc_ip:/share_path /mnt 或

# mount 127.0.0.1:/share_path  /mnt

2.       修改內核或init進程,使設備只運行shell,詳見注1、2

3.       設備啓動後,設置環境變量                                        

         #export PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin

           # exportLD_LIBRARY_PATH=/vendor/lib:/system/lib

4.       加載wifi驅動,並配置網絡

# insmod /system/module/bcmdhd.ko "firmware_path=/system/etc/wifi/fw-bcmdhd.bin   nvram_path=/system/etc/wifi/nvram-bcmdhd.txt"

 

# chmod 4777 /system/bin/wpa_supplicant

# busybox ifconfig wlan0 192.168.1.199

# busybox route add default gw 192.168.1.1

# netcfg

5.       連接wifi,參見注3

# /system/bin/wpa_supplicant -B -Dwext -iwlan0 -c/data/misc/wifi/wpa_supplicant.conf

6.       掛載NFS

# busybox mount -t nfs -o nolock192.168.1.190:/home/ubuntu/nfsroot/ /mnt/nfs

7.       卸載已掛載的虛擬文件系統,並設置新的根目錄

# umount /sys

# umount /proc

# umask 000

# cd /

# busybox chroot /mnt/nfs /system/bin/sh

8.       運行init

# ./init

二、可能問題

1. mount nfs時,提示no such device。

內核需配置nfs支持

2. mount nfs時。提示invalid argument

需要使用busybox mount。

3. 使用wpa_supplicant.conf連接wifi時,提示deamon錯誤

需要先掛載sys,proc,dev。

依賴的設備節點爲/dev/urandom,/dev/null

4. 運行init時大量進程無法啓動

修改/etc/exports加入no_root_squash字段,確保nfs客戶端有寫權限

 

三、注

注1:只運行shell,可修改內核,註釋掉init執行代碼,並添加執行shell的代碼

Eg: + run_init_process("/system/bin/sh");

這種情況下,需要手動掛載sys和proc並手動創建相應設備節點

mount [-t vfstype] [-o options] device dir

注2:在init內掛載虛擬文件系統、fork shell進程後停止,修改init的main函數:

Mount函數傳入參數註釋:

(1)掛載類型

(2)掛載路徑

(3)掛載設備

(4)指定文件系統的讀寫訪問標誌

(5)設備掛載選項(exp:”mode=0777”)

mount("proc","/proc", "proc", 0, NULL);

mount("sysfs","/sys", "sysfs", 0, NULL);

//以下是添加

   if ((pid = fork()) < 0) {

                 ERROR("forkfail\n");

    }

   if (!pid) {

             if (execl("/system/bin/sh","/system/bin/sh", (char *) NULL)) {

                            ERROR("shexec fail\n");

                            return-1;

             }

             ERROR("Data Call Should never gethere!\n");

    }else {

             if (execl("/sbin/ueventd","/sbin/ueventd", (char *) NULL)) {

                            ERROR("ueventexec fail\n");

                            return-1;

                   }

    }

         while(1);

 

注3:連接wifi使用的配置文件是/data/misc/wifi/wpa_supplicant.conf,裏面需要有待連接wifi的參數。可從已連接過此wifi的設備提取wpa_supplicant.conf文件。內容:

ctrl_interface=wlan0

update_config=1

 

network={

         ssid="VANSTONE-RD"

         psk="van12345"

         key_mgmt=WPA-PSK

         priority=2

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章