内核直接NFS挂载Android文件系统启动

(1)首先构建文件系统linux

  采用根文件系统,而后将system和data覆盖根文件系统中的system和data(这俩在根文件系统中是空的)android


采用我这篇 :  http://blog.csdn.net/commshare/article/details/13507019 的方法,samba挂载远程编译服务器上out中的android系统编译生成文件,以便于提取文件系统。windows

挂载方法为 mount //远程IP/文件目录 本地目录 -o username=***,password=****服务器



(2)开启pc机NFS服务dom

参见我这篇  http://blog.csdn.net/commshare/article/details/13507997
ide

给/etc/exports中加入 /nfsboot * (rw,insecure,sync,no_wdelay,insecure_locks,no_root_squash) ui

/nfsboot 是要挂载的文件系统存放位置。lua

把(1)中根文件系统放到/nfsboot下。spa


(3)配置内核.net

开发板是 三七一六 c   v二百  es,按照说明书配置。


打开nfs支持



没有nfs as root file

参考

========================

内核支持NFS分区(即编译时在File system中选中[*] Root file system on NFS), 
以及支持内核IP_PNP(即编译时在Networking中选中[*] IP: kernel level autoconfiguration)
    File systems  ---> 
        Network File Systems  ---> 
            <*> NFS file system support                        ## 必选
                [*]   Provide NFSv3 client support             ## 可选
            [*] Root file system on NFS                        ## 必选
    Networking  ---> 
        [*] Networking support 
            Networking options  ---> 
                [*]   IP: kernel level autoconfiguration       ## 必选
须要打开IP:Kernel level autoconfiguration 以及下面全部的选项包括DHCP, BOOTP, RARP,并且NFS Client Support不能是模块,必须编译进内核

============================

,咋办?

1)开启 kernel level autoconfiguration



我把它的三个子选项,都打开:



这样就能看到

设置"CONFIG_IP_PNP=y"

以及

CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y

都打开了。



选项的意义,参考个人:http://blog.csdn.net/commshare/article/details/13511987


这里,同时能够参考参考  http://blog.csdn.net/sonach/article/details/8102639 这位大牛的经历。

他根据内核源码,对这些作了分析。


2)关闭内核ramdisk支持,不然开机会默认挂ramdisk,不清楚缘由。



3)内核配置


v200的es 的

[1 ]内核make kernel_menuconfig 配置


[2]  修改的配置文件是这个   out/target/product/Hi3716CV200/obj/KERNEL_OBJ/.config


【3】要用这个文件,替换掉实际编译的时候的配置文件,这个编译用的配置文件在内核源码中

这个路径在device/hisilicon/bigfish/sdk/source/kernel/linux-3.4.y/arch/arm/configs/


源码采用了新的配置以后,就能够编译了。


(4)配置fastboot


配置fastboot为nfs启动。

setenv bootargs mem=1G root=/dev/nfs rootfstype=nfs rsize=1024,wsize=1024 nfsroot=192.168.1.88:/nfsboot,nolock  ip=192.168.1.10:192.168.1.88:192.168.1.1:255.255.255.0:dpnfs:eth0:on console=ttyAMA0,115200 init=/init mtdparts=hi_emmc:1M(fastboot),1M(partition),1M(bootargs),10M(recovery),2M(deviceinfo),8M(baseparam),20M(logo),20M(logobak),40M(fastplay),40M(fastplaybak),40M(kernel),20M(misc),500M(system),1024M(userdata),100M(cache),-(sdcard)


配置了,板子内核就能够自动识别到gw,ipaddr,serverip。可能这些环境变量都是为bootargs服务的。

貌似bootargs是放在一个单独的分区中的,因此改动了以后,即便从新烧录fastboot也不会改变这些参数。




(5)烧写kernel

参见我这篇 :http://blog.csdn.net/commshare/article/details/13622735


hitools有个问题,就是serverip设置了无论用,由于我在fastboot中设置的serverip是我虚拟机的ip,不是pc windows64的ip,因此tftp服务器/hitools ,收不到请求。

因此要把fastboot的serverip设置为运行tftp服务器的ip。这个不影响fastboot的bootargs的,并且又能让hitools正常工做。



(6)内核挂根文件系统


这些文件必须是这样的权限:




不然:


=================权限不对======会有这样的报错==============

ALSA device list:
  #0: HISI-AIAO
VFS: Mounted root (nfs filesystem) on device 0:10. 已经挂了NFS
Freeing init memory: 1728K
init: skipping insecure file '/init.rc'  
mmc1: new high speed MMC card at address 0001
mmcblk0: mmc1:0001 MMC04G 3.57 GiB 
mmcblk0boot0: mmc1:0001 MMC04G partition 1 2.00 MiB
mmcblk0boot1: mmc1:0001 MMC04G partition 2 2.00 MiB
 mmcblk0: p1 p2 < p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 >
 mmcblk0boot1: unknown partition table
 mmcblk0boot0: unknown partition table
init: Timed out waiting for /dev/.coldboot_done
init: Unable to open persistent property directory /data/property errno: 2
eth0: no IPv6 routers present


而后就卡主了。

========================================



参考

In jellybean, init.rc, default.prop etc should be writable only by the owner. You need to change the file permission to 644 (owner writable, world read-only) when you write the filesystem.
http://e2e.ti.com/support/embedded/android/f/509/p/204567/759121.aspx




(7)挂载成功



18:40:44]) ADDRCONF(NETDEV_UP): eth0: link is not ready PHY: mdio0:02 - Link is Up - 100/Full ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready IP-Config: Complete:      device=eth0, addr=192.168.1.10, mask=255.255.255.0, gw=192.168.1.1      host=dpnfs, domain=, nis-domain=(none)      bootserver=192.168.1.88, rootserver=192.168.1.88, rootpath= ALSA device list:   #0: HISI-AIAO VFS: Mounted root (nfs filesystem) on device 0:10. Freeing init memory: 1728K init (1): /proc/1/oom_adj is deprecated, please use /proc/1/oom_score_adj instead. mmc1: new high speed MMC card at address 0001 mmcblk0: mmc1:0001 MMC04G 3.57 GiB  mmcblk0boot0: mmc1:0001 MMC04G partition 1 2.00 MiB mmcblk0boot1: mmc1:0001 MMC04G partition 2 2.00 MiB  mmcblk0: p1 p2 < p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 p16 p17 p18 >  mmcblk0boot1: unknown partition table  mmcblk0boot0: unknown partition table EXT4-fs (mmcblk0p15): recovery complete EXT4-fs (mmcblk0p15): mounted filesystem with ordered data mode. Opts: (null) EXT4-fs (mmcblk0p16): recovery complete EXT4-fs (mmcblk0p16): mounted filesystem with ordered data mode. Opts: (null) EXT4-fs (mmcblk0p17): recovery complete EXT4-fs (mmcblk0p17): mounted filesystem with ordered data mode. Opts: (null) init: cannot find '/system/bin/rild', disabling 'ril-daemon' init: cannot find '/system/etc/install-recovery.sh', disabling 'flash_recovery' init: cannot find '/system/bin/dtvserver', disabling 'dtvserver' root@android:/ # ufsd: module license 'Commercial product' taints kernel. ufsd:: trace mask set to 0000000f ufsd: driver (UFSD_HEAD UFSD_HEAD_9, LBD=ON, delalloc, acl, ioctl, sd, fua, tr) loaded at bf000000 NTFS support included optimized: speed Build_for__Huawei_Hi3716cv200_k3.4.35_2013-05-09_with_lock_debugging_UFSD_HEAD_9  'Evaluation version - not for resale!' root@android:/ #  root@android:/ #  root@android:/ #  root@android:/ # ls -aleth0: no IPv6 routers present