基于LPC2210的嵌入式Linux开发平台构建
2.1 uCLinux 操作系统的移植
在开始移植操作系统之前,先准备好移植所需要的软件包,主要包括:交叉编译所需的编译工具包、uCLinux 源码包、完整的bootloader 程序及根文件系统。上述二种工具包都有众多版本,本文分别选择的是uCLinux-dist-20040408.tar.gz、arm-elf-tools-20040427.sh。整个移植工作分为三步:建立交叉编译环境;编译配置内核;bootloader 及根文件系统的移植。
2.1.1 建立交叉编译环境
将工具包 arm-elf-tools-20040427.sh 拷贝到目录/usr/src 下,为其增加可执行权限(#chmod755 arm-elf-tools-20040427.sh);然后安装arm-elf-gcc(# ./ arm-elf-tools-20040427.sh),安装完毕后查看/usr/local/bin 目录下是否存在arm-elf-gcc 等文件,如存在,表明交叉编译器安装成功;最后是添加交叉编译的路径,这一步在安装过程会自动执行和保存,并在下次启动之后仍然有效(#export PATH=$PATH:/usr/local/arm-elf/bin)。至此,交叉编译环境已经建立完毕。
2.1.2 交叉编译uCLinux 内核
在交叉编译内核之前,首先要对编译选项进行配置。为了配置过程的直观性,一般选择“make menuconfig”命令,进入uCLinux v3.1.0 Configuration 界面,主要是设置嵌入式处理器的型号以及操作系统的版本,然后选择Default all settings 后进行编译即可。交叉编译工作一次由以下命令完成:
#cd /usr/src/uCLinux-dist // uCLinux-dist 为uCLinux 源代码所在目录
#make distclean // 清除上一次编译所产生的辅助文件和目标文件
#make menuconfig // 通过文本菜单方式配置uCLinux
#make dep // 建立源代码文件的依赖关系
#make //编译内核
编译结束之后会在 uCLinux 安装目录下建立romfs 和images 两个目录。其中romfs 为romfs 文件系统的临时存放目录;images 为生成的目标代码目录,其中romfs.img 为romfs文件系统的映像文件,image.bin 为文件系统和内核代码的目标文件。
2.1.3 bootloader 及根文件系统的移植
通过 RS-232 串口将完整的bootloader 程序下载到目标板的NOR Flash 中。主要工作是在WinXP 下设置超级终端,波特率38400、8 位数据位、1 位停止位、无奇偶校验位、无流控制。通过运行下载程序,可以将bootloader 下载到NOR Flash 中。
建立 uCLinux 超级终端,设置波特率为115200、8 位数据位、1 位停止位、无奇偶校验位、无流控制。命名为uCLinux。然后启动开发板,在超级终端中也即嵌入式开发板的“显示器”中,可以看到bootloader 的启动界面,通过FlashFXP 软件可以将目录bin、boot、etc下的文件下载到开发板。
2.1.4 uCLinux 的启动
通过 bootloader 转载和引导刚刚生成的内核和文件系统。bootloader 引导内核的方式是:将内核影像文件和根文件系统下载至PSRAM 中直接启动,而不是从NAND Flash 中读入PSRAM,这种方法不需要烧写Flash。如图3 是uCLinux 操作系统启动后的界面。
图3 uCLinux 操作系统的启动界面
2.2 NFS 辅助开发环境的建立
网络文件系统(NFS,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操作。因此,通过建立NFS,把Linux 宿主机上的特定分区共享到待调试的目标板上,就可以直接在目标板上操作Linux 宿主机的特定分区,同时可以在线对程序进行调试和修改,大大方便了软件的开发。故NFS 是嵌入式Linux 开发的一个重要组成部分,下面详细说明如何建立NFS 辅助开发环境。
2.2.1 宿主机端NFS 服务器的配置
以 root 身份登录Linux 服务器,编辑/etc 目录下的共享目录配置文件exports,指定共享目录及权限等。
执行如下命令编辑文件 /etc/exports:
#vi /etc/exports
在该文件中添加如下内容:
/home/work 192.168.0.* (rw, sync, no_root_squash)
然后保存退出。
添加的内容表示允许 IP 地址范围在192.168.0.*的计算机以读写的权限来访问/home/work 目录。
其中,/home/work 也称为服务器输出共享目录;rw 读写权限;sync 数据同步写入内存和硬盘;no_root_squash 为NFS 服务器共享目录用户的属性,如果用户是root,那么对于这个共享目录来说就具有root 权限。
接着执行如下命令,以启动端口映射:
#/etc/rc.d/init.d/portmap start
最后执行如下命令启动 NFS 服务,此时NFS 就会激活守护进程,然后开始*client 端的请求:
#/etc/rc.d/init.d/nfs start
在 NFS 服务器启动后,还需检查Linux 服务器的防火墙等设置(一般需要关闭防火墙服务),确保没有屏蔽掉NFS 使用的端口和允许通信的主机,主要是检查Linux 服务器iptables,ipchains 等选项的设置,以及/etc/hosts.deny,/etc/hosts.allow 等文件。
到此,宿主机端 NFS 服务器配置完成。
最后在宿主机上进行 NFS 服务器的回环测试,验证共享目录是否能够被访问。在宿主机上运行如下命令:
# mount –t nfs –o nolock 192.168.0.10:/home/work /mnt
# ls /mnt
命令将宿主机的 NFS 输出共享目录挂载到/mnt 目录下,因此如果NFS 配置正确的话,应该可以在/mnt 目录下看到/home/work 共享目录的内容。
2.2.2 目标板端NFS 客户端的配置
在宿主机端的设置成功之后,还需要对客户端进行相关的设置。在目标板系统的命令行下,执行如下命令来进行NFS 共享目录的挂载:
/> mkdir /mnt/nfs //建立宿主机输出共享目录的挂载点
/> mount –t nfs –o nolock 192.168.0.10:/home/work /mnt/nfs
/> cd /mnt/nfs
/> ls
此时,目标板终端所显示的内容即为宿主机的输出目录的内容,即宿主机的输出目录/home/work 通过NFS 映射到了嵌入式目标板的/mnt/nfs 目录。由于Linux 默认下不启动NFS,每次宿主机进入Linux 之后都要重新完成NFS 的启动和挂载,比较麻烦。可以将以上的命令写入宿主机的脚本文件/etc/rc.d/rc.local 中,宿主机启动时会执行此文件。
评论