2014025676(18)《嵌入式系统程序设计》第三,四周学习总结

一、Linux交叉开发环境的搭建
交叉开发:在主机环境下开发,在目标板上运行的开发模式叫作交叉开发。
交叉编译:在主机环境下生成目标板上的可执行代码的编译方式为交叉编译。
进行交叉开发前,需要对交叉开发环境进行一定的配置,包括交叉开发工具的安装、测试以及环境变量的配置。
搭建交叉开发环境需要有交叉开发工具arm-linux-gcc-3.4.6-glibc-2.3.6,以下便是交叉开发工具的安装、测试与配置的步骤:

1、交叉开发工具的安装

arm-linux-gcc-3.4.6-glibc-2.3.6的下载地址为:http://labfile.oss.aliyuncs.com/courses/811/gcc-3.4.6-glibc-2.3.6.tar.bz2
有两种方法可以将该工具装入Linux中:
(1)可以将其下载入windows系统中,通过虚拟机软件将其传入Linux虚拟系统中。
(2)也可以在Linux系统中直接通过以上的网址将开发工具下载到Linux系统中,命令为:

wget http://labfile.oss.aliyuncs.com/courses/811/gcc-3.4.6-glibc-2.3.6.tar.bz2

总之,软件压缩包,把传入或下载的压缩包解压即可成功安装(类似Windows中的绿色软件,解压即可,不需要手动安装)。命令如下:

tar jxvf gcc-3.4.6-glibc-2.3.6.tar.bz2

技巧&心得:
  (1)wget+网址的命令格式十分实用,在联网的情况下,可以直接把软件下载到Linux中,省去了Windows与Linux共享的麻烦。
  (2)个人认为VMware的共享功能相较于VirtualBox更加强大,不仅设置共享文件夹方便的多,而且可以直接脱宅共享。(也许我对VirtualBox了解不够深~~~)

2、交叉开发工具的运行测试

交叉开发工具运行需要一定的条件支持,需要尝试运行该工具,测试当前的环境是否符合要求。
进入gcc-3.4.6-glibc-2.3.6安装目录的bin目录下,输入以下代码进行测试:

./arm-linux-gcc -v // 查看 arm-linux-gcc 的版本

若Linux系统为64位,则会出现以下错误提示:

这是因为安装的gcc-3.4.6-glibc-2.3.6是32位软件,与64位的Linux系统不兼容导致的。在联网的情况下,可以通过输入以下命令解决:

sudo apt-get update // 同步最新的apt-get列表

sudo apt-get install lsb-core // 安装LSB标准,提高软件兼容性

安装LSB标准后,再次输入 ./arm-linux-gcc 会发现没有上面的提示了。

3、配置环境变量

arm-linux-gcc是一个文件,只能进入gcc-3.4.6-glibc-2.3.6下的bin目录运行。而这条语句的功能是编译,需要在其他目录像shell语句一样去执行,这样的话,必须将它所在的目录添加到环境变量PATH中,否则执行时会出现以下错误:

添加环境变量有临时添加和永久添加两种方式:
(一)临时添加
输入以下命令:

export PATH=$PATH:/home/shiyanlou/gcc-3.4.6-glibc-2.3.6/bin
这样,就将该目录临时加入了PATH中,但如果关闭了终端,该目录会从PATH中丢失,下次启动终端,必须用上面的命令重新添加。

(二)永久添加
可以通过修改 /etc/profile 文件来实现:

sudo vim /etc/profile // 打开 profile 文件

// 在文件末尾加入下面代码,保存并退出
export PATH="$PATH:/home/shiyanlou/gcc-3.4.6-glibc-2.3.6/bin"

source /etc/profile // 在当前bash环境下读取并执行 profile 中的命令

这样配置的PATH是永久性的,不会随着系统的关闭而丢失。

通过以上两种方式添加环境变量后,可以用 $PATH 查看配置结果:

这样 arm-linux-gcc 便可作为shell命令使用了。交叉开发环境也就搭建成功了。

二、bootloader的配置、移植和编译
在为新的开发板开发程序时,需要配置新开发板的配置文件,为了方便,可以采用“复制->粘贴->修改”的方式。

1、获得u-boot源码

u-boot源码的下载地址为:
http://labfile.oss.aliyuncs.com/courses/811/u-boot-1.3.2.tar.bz2
这个压缩包可以用上面所说的两种方式导入Linux系统中,并用 tar 命令将之解压出来。

2、建立板级支持包

开发板的型号不同,其配置文件也不一样,在board目录下,每一块开发板都有一个对应的目录:

添加新的开发板,就需要为之建立与它名字一致的新目录,并存入它的配置文件。可以从相似的原有开发板目录复制并修改而来,以新开发板 eduk2410 和原有开发板 smdk2410 为例:

(1)创建新的目录

mkdir eduk2410 // 建立 eduk2410 对应的目录

cp smdk2410/* eduk2410 // 将与 eduk2410 相似的 smkd2410 的配置文件复制入 eduk2410 的目录中

(2)修改 .c 源文件

首先,需要把 .c 源文件的名字改为新开发板的名字,命令如下:

cd eduk2410 // 进入 eduk2410 对应的目录

mv smdk2410.c eduk2410.c // 将源文件的名字修改为 eduk2410.c

接着,需要修改源文件中 eduk2410 的端口号,将gpio->GPBCON = 0x00044555改为gpio->GPBCON = 0x0004455A

(3)修改当前目录的 Makefile 文件

在编译时,要编译这个源文件,就需要将当前目录下的 Makefile 文件中的 COBJS 变量原来的值改为新的值: eduk2410.o:

(4)添加配置文件

每个开发板都有一个自己的配置文件,所以必须为新的开发板建立自己的配置文件。
首先,可以直接从原有的开发板的配置文件中修改而来,命令如下:

cd ../../ // 返回 u-boot 的顶级目录,利于下一条命令的实现

cp include/configs/smdk2410.h include/configs/eduk2410.h // 复制 smdk2410 的配置文件并改名为 eduk2410

然后,需要将新开发板的配置文件信息加入到 u-boot 的顶级目录的 Makefile 文件中:(可以复制其上两行或下两行的文字,粘贴后修改)

技巧&心得
  (1)用 vim 修改文件时,可以在普通命令模式下用 /+关键字 的方式定位要修改的某一行。

3、配置和编译 U-Boot

在新开发板配置文件建立完成以后,就可以进行期待已久的正式配置和编译工作了。
首先,输入以下命令进行 U-boot 的配置:

make eduk2410_config // 配置 eduk2410 开发板

出现下面的提示,就说明配置完成,已经成功了一半:

接下来是最后一步,编译:

make // 执行 U-boot 顶级目录下的 Makefile 文件

编译成功后,就会在当前目录下生成一个 U-boot.bin 文件,这就是最终的二进制可执行文件,可以植入开发板运行。
具体的实验操作保存在实验楼的实验报告中:
https://www.shiyanlou.com/courses/reports/1275034

收获与感悟
  (1)学会了交叉开发环境的搭建,知道了用LSB标准来解决软件的兼容问题。
  (2)学会了两种添加PATH的方法,使某个文件可以像shell命令一样在任意一个目录下执行。
  (3)掌握了 U-boot 的配置和编译过程,学会建立并配置新开发板,在这过程中深刻体会了vim命令的便捷性。
  (4)通过上课和查询资料,对原来C语言比较薄弱的部分——文件操作有了较深的理解,可看懂相关的代码,并编写简单的文件操作程序。

posted @ 2017-05-14 12:24  lixiangwei  阅读(184)  评论(0编辑  收藏  举报