一、移植环境
- 主 机:VMWare--Fedora 9
- 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4
- 编译器:arm123.com.cn/linux/arm-linux-gcc-4.3.2.tgz" target="_blank">arm-linux-gcc-4.3.2.tgz
- u-boot:u-boot-2009.08.tar.bz2
二、移植步骤
10)u-boot利用tftp服务下载内核和利用nfs服务挂载nfs文件系统。
知识点:
- tftp服务的安装与配置及测试;
- nfs服务的安装与配置及测试;
- u-boot到kernel的参数传递(重点)。
我们知道使用tftp下载内核和使用nfs挂载文件系统的好处是,当我们重新编译内核或文件系统后不用重新把这些镜像文件再烧录到flash上,而是把这些镜像文件放到开发主机的tftp或nfs服务的主目录下,通过网络来加载他们,不用频繁的往flash上烧,这样一可以保护flash的使用寿命,二可以方便的调试内核或文件系统,提高开发效率。可见,让u-boot实现这个功能是一件很有意义的事情。
实现这样的功能很简单,网上也有很多资料。但有很多细节的东西如果稍不注意就导致失败,这里就结合本人实现的过程进行讲述和一些问题的分析。
要使用tftp服务及测试它要安装两个软件包,一个就是tftp服务器,另外一个就是tftp客户端,这里安装客户端只是用于在主机本地测试tftp服务器是否正常运行的,来确保u-boot能够访问tftp服务(u-boot中已有tftp客户端的功能,其实在前面几篇中都已经使用了tftp下载内核或文件系统到开发板上,如果那里都做到了,这里就可以直接跳过)。
首先使用rpm命令查看你的主机上是否已经安装了tftp服务器和客户端,如果没有安装就去下载这两个软件包进行安装或者可以使用yum命令进行在线安装,yum会自动的去搜索适合你主机平台的最新软件包进行下载安装,如果主机已经安装了,则会提示软件包已经安装了最新的版本。如下图所示:
配置tftp服务器,主要是配置tftp的主目录及访问权限。因tftp服务依赖于xinetd服务,所以一般tftp服务安装好后其配置文件一般会在/etc/xinetd.d/目录下:
[root@localhosthome]# vi /etc/xinetd.d/tftp
service tftp { disable=no socket_type=dgram protocol=udp wait=yes user=root server=/usr/sbin/in.tftpd server_args=-s/home/tftp-root-c//主要是修改这里,指定tftp服务器的主目录,-c选项是指可以创建文件 per_source=11 cps=100 2 flags=IPv4 } |
创建刚才指定的tftp服务器主目录,也要注意主目录的可读可写的权限:
[root@localhosthome]#mkdir /home/tftp-root [root@localhosthome]#chmod 777 /home/tftp-root |
启动和测试tftp服务:
[root@localhosthome]#service xinetd restart //重启xinetd服务就会启动其下的所有服务,也包括tftp服务 [root@localhosthome]#service iptables stop //关闭防火墙 [root@localhosthome]#tftp 主机IP地址 tftp>get要下载的文件 tftp>put要上传的文件 tftp>q [root@localhosthome]# |
以root的身份在控制台输入setup,在系统服务选项中选中nfs服务,如下图:
配置NFS服务器的共享主目录,也要注意权限问题:
[root@localhost home]#vi /etc/exports//如果没有这个文件就创建它,添加下面一行配置信息,注意格式一定要正确,否则导致服务不正常 /home/filesystem *(rw,no_root_squash,sync) 注释:“/home/filesystem”是NFS服务器的主目录,注意目录的权限 “*”表示所有的IP都可以访问NFS主目录 “rw”表示可读可写 ”no_root_squash“表示登入到NFS主机的用户如果是ROOT用户,他就拥有ROOT的权限 “sync”表示同步
[root@localhost home]#service nfs restart//重新启动NFS服务,使配置文件生效 |
测试NFS服务是否正常。将事先准备好的文件系统放到NFS主目录下,如下:
[root@localhost home]# ls /home/filesystem/ bin dev home lib mnt root sum100 tmp var debug etc hostname linuxrc proc sbin sys usr [root@localhost home]# //在主机本地测试NFS服务,将NFS主目录下的文件系统挂载到/mnt目录下,192.168.1.101是主机的IP [root@localhost home]#mount -o nolock -t nfs 192.168.1.101:/home/filesystem /mnt |
可以看到/mnt目录下的内容和NFS主目录/home/filesystem下的内容完全一致,说明NFS服务正常:
我们知道,在kernel配置选项Boot options中有一个Default kernel command string参数项,而在u-boot参数中也有一个bootargs参数项,他们都是供内核启动用的,那他们又有什么区别呢,内核启动时到底是用哪一个呢?两种参数项分别如下图所示(kernel中的参数指定是从开发板Flash分区上挂载文件系统,u-boot中的参数指定的是从NFS挂载文件系统):