用NFS启动rootfs的浅度总结

平台:海思hi3716c

linux kernel:3.0.8

rootfs: mer-core based on release 20121018.1

使用下面的bootargs:

setenv bootargs 'mem=764M vmalloc=600Mconsole=ttyAMA0,115200 mmz=ddr,0,0xb3c00000,100M mtdparts=hi_sfc:448K(fastboot),64K(bootargs),3520K(recovery),64K(deviceinfo);hinand:6M(baseparam),8M(logo),10M(fastplay),30M(cache),10M(misc),10M(kernel),300M(system),134M(userdata),4M(blackbox),1536M(sdcard)root=/dev/nfs rw nfsroot=192.168.188.141:/home/zhanghui/nfs/rootfs/mer-hybris ip=dhcp'

问题1:

VFS: Cannot open root device"nfs" or unknown-block(0,255)

Pleaseappend a correct "root=" boot option; here are the availablepartitions:

原因是:kernel中的NFS支持没设置好。

解决办法:

理论上说,要用NFS启动rootfs,需要有两个支持:

(1)NFSv3 client support

(2)Root file system on NFS

但是,在hi3716c的kernel目录下,'make menuconfig'时死活没有看到"Root file system on NFS"这个选项。

网上查到"Root file system on NFS"对应的是"CONFIG_ROOT_NFS",于是

#vim arch/arm/configs/godbox_icsmer_defconfig

在上面的文件加入"CONFIG_ROOT_NFS=y"。

然后执行:

#make godbox_icsmer_defconfig

查看.config文件,发现并没有“CONFIG_ROOT_NFS”这个东东。表明没有生效。

找到链接http://cateee.net/lkddb/web-lkddb/ROOT_NFS.html,里面有描述:

Root file system on NFS found in fs/nfs/Kconfig

The configuration item CONFIG_ROOT_NFS:

原来依赖了CONFIG_IP_PNP。

于是,

#vim arch/arm/configs/godbox_icsmer_defconfig

设置"CONFIG_IP_PNG=y"

#make godbox_icsmer_defconfig

检查生成的.config文件,发现CONFIG_ROOT_NFS=y已经在里面了。

#make -j 8 uImage

将生成的内核arch/arm/boot/uImage烧写入FLASH,重启系统。


问题2

在问题1解决后,碰到错误信息:

IP-Config: Incomplete network configurationinformation.

VFS: Unable to mount root fs via NFS,trying floppy.

VFS: Cannot open root device"nfs" or unknown-block(2,0)

Pleaseappend a correct "root=" boot option; here are the availablepartitions:
查看kernel/net/ipv4/ipconfig.c,发现有几行代码:

/*
         * If none of DHCP/BOOTP/RARP was selected, return with an error.
         * This routine gets only called when some pieces of information
         * are missing, and without DHCP/BOOTP/RARP we are unable to get it.
         */
        if (!ic_proto_enabled) {
                printk(KERN_ERR "IP-Config: Incomplete network configuration information.\n");
                return -1;
        }

从这里看,应该至少使能DHCP/BOOTP/RARP中的一个;检查godbox_icsmer_defconfig发现,这三个东东没有。

因此,

#vim arch/arm/configs/godbox_icsmer_defconfig

在其中添加三行:

CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
然后,

#make godbox_icsmer_defconfig

#make -j 8 uImage

将生成的内核arch/arm/boot/uImage烧写入FLASH,重启系统。

问题3:

还有一个没有搞明白的问题。虽然现在用DHCP获取IP可以通过NFS挂载ROOTFS了,但如果在bootargs中改用静态IP,怎么也不行,总是打印"Sending DHCP request"。不知为什么。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,谢谢你提供的信息。根据提供的内容,我能理解你正在描述一个关于构建一个目标为'/home/book/nfs_rootfs/10_freetype/freetype-2.10.2/objs/l'的配方或步骤。 要构建目标为'/home/book/nfs_rootfs/10_freetype/freetype-2.10.2/objs/l'的配方,你可以按照以下步骤进行操作: 1. 首先,确保你的操作系统中安装了所需的开发工具和依赖项。这些工具可能包括编译器、构建工具(如make)、库文件等。可以通过使用适当的包管理器来安装这些工具和依赖项。 2. 下载或获取freetype-2.10.2源代码的压缩包。你可以从官方网站或源代码存储库中获取。 3. 解压源代码压缩包,并进入解压后的目录。 4. 在源代码目录中查找一个名为'objs/l'的目录。确保该目录存在并为空。 5. 接下来,你可以根据特定的构建系统和编译器来选择合适的构建命令。常见的构建命令包括'make'和'cmake'。使用适当的命令,以能够生成目标为'/home/book/nfs_rootfs/10_freetype/freetype-2.10.2/objs/l'的目标文件。 6. 在构建过程中,如果遇到错误或警告信息,请根据提示进行适当的调整或修复。这可能包括安装缺少的依赖项、更新构建脚本或相关文件等。 7. 当构建成功完成后,确认'/home/book/nfs_rootfs/10_freetype/freetype-2.10.2/objs/l'目录中生成了预期的构建目标或文件。 这些步骤提供了一般的构建配方,以创建目标为'/home/book/nfs_rootfs/10_freetype/freetype-2.10.2/objs/l'的构建文件。但具体的步骤可能因操作系统、编译器和构建系统的差异而有所不同。可以根据具体的环境和要求进行适当的调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值