您的位置:首页 > 移动开发 > Android开发

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

2013-10-31 11:30 591 查看
(1)首先构建文件系统

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

采用我这篇 : /article/3669348.html 的方法,samba挂载远程编译服务器上out中的android系统编译生成文件,以便于提取文件系统。

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

(2)开启pc机NFS服务

参见我这篇 /article/3669350.html

给/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

都打开了。



选项的意义,参考我的:/article/3669349.html

这里,同时可以参考参考 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

参见我这篇 :/article/3669351.html

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: