离开了8个月,总算回来了,再看看以前的东西,发现忘得都差不多了。这几天看了一下信箱里的信,看到网友们的问题,发现凭目前那点残缺不全的记忆,大部分问题都没发回答。真是忘了很多东西。最近重新拿出开发板,做了点恢复性训练。有些网友的信已经发来几个月了,现在才开始动手解决朋友们的问题,可能也没什么价值了。所以,我打算挑几个经常出现的问题把解决方法写成blog,兴许还能帮到以后遇到这类问题的朋友。今天写第一个,也是最简单的一个:关于u-boot for tiny210 NFS启动Android根文件系统。
碰到这个问题的朋友大多数是因为NFS配置不正确(内核及服务器部分配置不正确)。u-boot for tiny210网络部分已经完全没问题了。只需要按下面的步骤就完全OK:
假设我的根文件系统放在/nfsroot/rootfs_android 目录下。
1,配置好网络。这包括你的开发板uboot的ip和pc的ip地址要在同一个网段, 网关可以都不设置,如果设置两者的网关要设成相同的。
2、内核的配置: File systems --->
[*] Network File Systems --->
--- Network File Systems
<*> NFS client support
│ │ [*] NFS client support for NFS version 3
│ │ [ ] NFS client support for the NFSv3 ACL protocol extension
│ │ [ ] NFS client support for NFS version 4 (EXPERIMENTAL)
│ │ [*] Root file system on NFS
配置完后重新编译。
3、内核启动参数
如果你的内核配置了DHCP,内核会在启动时会默认用DHCP获取IP,使内核启动到这一阶段时ip被换掉,最终导致NFS挂载失败,所以我们在写内核启动参数是要注意一下ip= 这个参数的写法,具体格式介绍如下:
ip参数的格式如下:
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
client-ip:
你正在使用的这块板子,你要为它设置的ip
server-ip:
提供nfs服务的服务器的ip地址。如不需要NFS服务于板子,则此项可以空置
gw-ip:
网关的ip地址,如果nfs与目标板在同一个网段内,则此项可以空置
netmask:
子网掩码,如此项为空,则子网掩码为默认值255.255.255.0
hostname:
你希望给目标板设置的主机名,在linux的shell中的如bash,命令行最开始有一个形如 blacksword@laptop2:~ $ 这样的一个提示符,blacksword指当前的用户,而laptop2就是一个hostname.此项可以留空
device:
如果目标板上仅一个网卡,且只接了一个PHY,同时电路的设计没有将PHY拉出两个地址来,则此项为空。 如果不指有一个网卡,则可以指定要设置的ip地址是作用于哪一个网卡的。 如指定给第一块网卡,则该参数为eth0. 第二块为eth1,依此类推。
autoconf:
自动配置未明确指定参数的方式,可以是dhcp, rarp, bootp。如果不希望使用自动配置则可以使用off值来关闭 autoconf参数可以独立作用于ip参数,如ip=dhcp即表示由dhcp服务器给内核的ip参数提供所有数据。 ip=off则表示所有参数都不配置,留待系统启动进行配置。
指定静态ip的方法为 ip=<clinet-ip>::::eth0:off 请注意中间冒号的个数。其他各项可以根据自己的实际情况来指定相应的值。
下面是我的启动参数:
CONFIG_CMDLINE="root=/dev/nfs nfsroot=192.168.186.30:/nfsroot/rootfs_androidip=192.168.186.13:192.168.186.30::255.255.255.0::eth0:off rw console=ttySAC0,115200 init=/linuxrc androidboot.console=s3c2410_serial0 mem=512M"
注意红字部分,配置后禁用了DHCP。
3.pc服务器端的配置
首先是nfs服务的配置文件: /etc/exports这个文件
内容:
/nfsroot/rootfs_android 192.168.186.*(rw,sync,no_root_squash)
当然内容要根据自己的pc配置,我只举个例子。记得配置完后要重启一下NFS服务 用下面命令即可
$service nfs restart
注意:遇到挂载失败时,首先看一下网络是否是通的,再就是看一下权限,如果用友善的根文件系统,要注意解压时的权限。
下图是成功启动后的打印信息: