(1)首先构建文件系统
采用根文件系统,然后将system和data覆盖根文件系统中的system和data(这俩在根文件系统中是空的)
采用我这篇 : http://blog.csdn.net/commshare/article/details/13507019 的方法,samba挂载远程编译服务器上out中的android系统编译生成文件,以便于提取文件系统。
挂载方法为 mount //远程IP/文件目录 本地目录 -o username=***,password=****
(2)开启pc机NFS服务
参见我这篇 http://blog.csdn.net/commshare/article/details/13507997
给/etc/exports中加入 /nfsboot * (rw,insecure,sync,no_wdelay,insecure_locks,no_root_squash)
/nfsboot 是要挂载的文件系统存放位置。
把(1)中根文件系统放到/nfsboot下。
(3)配置内核
开发板是 三七一六 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