“黑色经典”系列之《嵌入式Linux C语言应用程序设计》嵌入式主机通信环境的配置配置Linux下的minicom和Windows下的超级终端配置NFS服务搭建Linux的根文件系统Bootloader的原理华清远见<嵌入式linux就业班>培训教材3.1 嵌入式系统开发环境的构建3.1.1 嵌入式交叉编译环境搭建搭建交叉编译环境是嵌入式开发的第一步,也是关键的一步。
不同的体系结构、不同的操作内容甚至是不同版本的内核,都会用到不同的交叉编译器。
选择交叉编译器非常重要,有些交叉编译器经常会有部分的BUG,都会导致最后的代码无法正常运行。
对于一般的开发板,厂商都会提供在该开发板上能够正常运行的交叉编译工具,其安装的过程比较简单,一般在厂商中提供的用户手册中会有详细说明,这里就不再赘述。
另外,如µClinux也有制作成单一脚本工具,安装时只需执行该脚本就可以了。
在这里,首先来讨论一下关于选择gcc版本的问题。
gcc的版本有很多种,其中低于3.3.2版本的只能编译Linux 2.4版本的内核,而3.3.2版本既能支持Linux 2.4版本的内核,也能支持Linux 2.6版本的内核,在本书采用的gcc版本为3.3.2。
具体软件以及它们对应的版本和下载地址binutils下版本:gcc:用具。
下版本:glibc:用下载地址:ftp:///gnu/glibc/glibc-2.2.5.tar.bz2。
版本:2.2.5glibc-linuxthreads:提供Linux线程库。
下载地址:ftp:///gnu/glibc/glibc-linuxthreads-2.2.5.tar.bz2。
版本:2.2.5再接下来,用户需要为这些工具准备好它们的工作目录。
在这里,首先建立一个~/cross 目录,之后,用户再在~/cross目录下建立以下目录。
# mkdir ~/cross/scource# mkdir ~/cross/patches# mkdir ~/cross/linux-2.6.x做好这些准备工作之后,下面就可以开始正式开始操作了。
1.编译binutils用户可以按照以下步骤编译binutils。
# cd ~/cross# tar –jxvf ./scource/binutils-2.14.tar.bz2华清远见<嵌入式linux就业班>培训教材# cd binutils-2.14# mkdir arm-linux# cd arm-linux# ../configure –target=arm-linux –prefix=/usr/local/arm/3.3.2# make# make install这些步骤主要用于解压binutils压缩包,编译arm-linux-常用工具链。
在这里用“./configure”命令生成相关的Makefile,其中的“target”是指明交叉编译的目标板体系结构,而“prefix”是指明编译完成后的安装目录。
这个编译过程一般会比较顺利,此后编译出来的工具在目录“/usr/local/arm/3.3.2/bin”下,用户可以使用命令“ls –l /usr/local/arm/ 3.3.2/bin”来查看该目录下文件的详细信息,其结果如下所示。
可以看到,这些工具都是以“arm-linux”开头的,这是与体系结构相一致的。
接下来,用户需要把所生成工具的目录添加到环境变量中去,其命令如下所示。
# export PATH=$PATH:/usr/local/arm/3.3.2/bin用户还可以使用命令“echo $PATH”来查看添加后的情况,如下所示。
# echo $PATH# /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin :/home/software/jdk1.3.1/bin/:/home/software/mysql/bin/:/root/bin:/usr/lo cal/arm/3.3.2/bin小知识用以上方法添加的环境变量在机器重启后就会无效,要使这些环境变量在重启之后继续有效的话可以在以下3处之一进行添加。
/etc/profile:是系统启动过程执行的一个脚本,对所有用户都有效。
~/.bash_profile:是用户的脚本,在用户登陆时生效。
~/.bashrc:也是用户的脚本,在前一脚本中调用生效。
>培训教材2.初次编译gccgcc的编译分两次。
由于此时还没有编译glibc,因此还不能完整地编译gcc,但glibc的编译有离不开gcc,因此,在这里需要首先编译出一个具体最基本功能的gcc,在编译完glibc 之后再完整编译gcc。
在这里,按以下步骤进行编译。
# tar –jxvf ./source/gcc-3.3.2-tar.bz2# cd gcc-3.3.2之后再修改“gcc/config/arm/t-linux”这个配置文件,使其不对libc和gthr_posix.h文件进行编译。
其中加粗的部分是用户添加的,“-Dinhibit_libc”是用于禁止glibc库。
华清远见<嵌入式linux就业班>培训教材再接下来,就可以编译gcc了,其具体步骤如下所示。
# mkdir arm-linux# cd arm-linux# ../configure –target=arm-linux \# --prefix=/usr/local/arm/3.3.2 \# --with-header=~/cross/linux-2.6.x/include \# --disable-shared –disable-threads –enable-languages="c"# make# make install这里的“configure”命令较为复杂,由于包含了众多的选项,因此可以使用“\”换行符,使其格式清晰。
在该命令中的“target”是指定交叉工具的目标板体系结构,“prefix”是要安装的路径,“disable-shared”指定不依赖共享库,“disable-threads”是指定不使用现成,最后的“enable-language”是指定仅支持C语言。
在这里要注意的是,需要把linuxthreads解压到glibc-2.2.5目录里,接下来就可以开始编译glibc了。
由于glibc有一些bug,用户最好能找到其补丁文件再进行编译。
# mkdir arm-linux# cd arm-linux# CC=arm-linux-gcc \AS=arm-linux-as \LD=arm-linux-ld \../configure –host=arm-linux \--with-headers=~/cross/linux-2.6.x/include \--enable-add-ons=linuxthreads –enable-shared \--prefix=/usr/local/arm/3.3.2/arm-linux# make# make install这里configure的选项与之前类似,其中的“enable-add-ons= linuxthreads”是指支持线程>培训教材库。
编译glibc的过程比较漫长,在编译通过之后,就会在“/usr/local/arm/3.3.2/arm-linux”目录下安装上glibc共享库等文件。
4.完整编译gcc在编译完成glibc之,用户就可以编译完整的gcc了。
用户需要首先修改之前修改过的“t-linux”文件,将之前加上的那两句语句去掉,再按以下步骤进行。
前文已知,嵌入式系统开发的程序运行环境是在硬件开发板上的,那么如何把开发板上的信息显示给开发人员呢?最常用的就是通过串口线输出到宿主机的显示器上,这样,开发人员就可以看到系统的运行情况了。
在Windows和Linux中都有不少串口通信软件,可以很方便地对串口进行配置,其中最主要的配置参数就是数据传输率、数据位、停止位、奇偶校验位和数据流控制位等,但是它们一定要根据实际情况进行相应配置。
下面介绍Windows中典型的串口通信软件Linux下的“minicom”和Windows下的“超级终端”。
1.minicomminicom是Linux下串口通信的软件,它的使用完全依靠键盘的操作。
minicom的操作有些类似于Emacs,通常是使用组合键来进行操作,如“Ctrl-A Z”,这表示先同时按下Ctrl 和“A”(大写),然后松开此二键再按下“Z”。
minicom有很多功能,下面主要讲解minicom的进行串口参数的配置及常用使用方法。
华清远见<嵌入式linux就业班>培训教材(1)启动minicomminicom的启动有多种方式,最常用的一种就是在命令行中键入“minicom”,如图3.1所示。
这时,minicom在会进行默认的初始化配置。
图3.1 minicom启动此外,用户还可以使用以下参数来启动minicom,如表3.1所示。
表3.1 命令行模式转到插入模式命令参数作用minicom -s root使用此选项在/etc/minirc.dfl中编辑系统范围的缺省值。
使用此参数后,minicom 将不进行初始化,而是直接进入配置菜单。
如果因为用户的系统被改变,或者第一次运行minicom时,minicom不能启动,这时使用这个参数就会比较有用。
但对于多数系统,基本都已经设定了比较合适的缺省值minicom -o 使用该选项时minicom将跳过初始化代码不进行初始化。
如果用户未复位(reset)就退出了minicom,又想重启一次会话(session)时,那么可以使用这个选项(不会再有错误提示:modem is locked)(2)查看帮助在进入minicom后,该屏幕已经提示可按键Ctrl+A Z,来查看minicom的帮助,如图3.2所示。
>培训教材图3.2 minicom帮助(3)配置minicom串口属性与相关的属性主要包括串口号、数据传输率、数据位和停止位这几部分这些属性在开发板的用户手册中都会有此说明,用户可以进行查看。
按照图的帮助所示,用户可键入“O”(代表Configure Minicom)来配置的串口参数当然也可以直接键入“Ctrl-A O”来进行配置,如图3.3所示。
图3.3 minicom配置界面华清远见<嵌入式linux就业班>培训教材在这个配置框中选择“Serial port setup”子项,进入如图3.4所示配置界面。