2014025659 《嵌入式程序设计》第三、四周学习总结
第3、4周主要学习内容
主要学习了如何搭建嵌入式Linux交叉开发环境以及Bootloader的配置、移植和编译
一、搭建嵌入式Linux交叉开发环境
1.安装arm-linux-gcc交叉编译工具
- 首先,利用
wget+http://labfile.oss.aliyuncs.com/courses/811/gcc-3.4.6-glibc-2.3.6.tar.bz2
联网情况下下载gcc-3.4.6-glibc-2.3.6.tar.bz2
压缩包 - 然后
tar jxvf gcc-3.4.6-glibc-2.3.6.tar.bz2
对压缩包进行解压,解压完成后ls
一下,可以看到解压缩后生成的目录是gcc-3.4.6-glibc-2.3.6 - 接下来测试arm-linux-gcc是否可运行(进入gcc-3.4.6-glibc-2.3.6/bin目录,执行pwd命令确定所在目录,然后执行ls命令查看当前目录下是否有arm-linux-gcc文件,若有该文件,使用./运行该文件)具体代码如下:
$ cd gcc-3.4.6-glibc-2.3.6/bin/
$ pwd
$ ls
$ ./arm-linux-gcc
此时会报错:没有那个文件和目录。运行结果显示找不到该文件或目录,主要原因是当前系统环境是x86_64位,而arm-linux-gcc是32位。解决64位系统下安装32位软件的问题需要再加载一些包。代码如下:
$ sudo apt-get update
$ sudo apt-get install lsb-core
安装完成后执行./arm-linux-gcc
,提示arm-linux-gcc:no input files,意思是arm-linux-gcc命令没有输入文件,说明该文件在当前环境下可用。
- 下面我们要将arm-linxu-gcc加入环境变量PATH中。修改环境变量有几种方法,以在实验楼的环境下将arm-linxu-gcc加入环境变量PATH中为例,具体方法如下:
方法一:
$ export PATH=$PATH:/home/shiyanlou/gcc-3.4.6-glibc-2.3.6/bin
//配置完后可以通过 $PATH 或 echo $PATH 查看配置结果。
生效方法:立即生效
有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的PATH配置
用户局限:仅对当前用户
方法二:
通过修改.bashrc文件:
$ vim ~/.bashrc
//在最后一行添上:export PATH=/home/shiyanlou/gcc-3.4.6-glibc-2.3.6/bin:$PATH
生效方法:(有以下两种)
1、关闭当前终端窗口,重新打开一个新终端窗口就能生效
2、输入“source ~/.bashrc”命令,立即生效
有效期限:永久有效
用户局限:仅对当前用户
方法三:
通过修改profile文件:
$ vim /etc/profile
//找到设置PATH的行,添加:export PATH=/home/shiyanlou/gcc-3.4.6-glibc-2.3.6/bin:$PATH
生效方法:系统重启
有效期限:永久有效
用户局限:对所有用户
方法四:
通过修改environment文件:
$ vim /etc/environment
//在PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"后加入“:/home/shiyanlou/gcc-3.4.6-glibc-2.3.6/bin”
生效方法:系统重启
有效期限:永久有效
用户局限:对所有用户
二、Bootloader的配置、移植和编译
- 首先,利用
wget+http://labfile.oss.aliyuncs.com/courses/811/u-boot-1.3.2.tar.bz2
联网情况下下载u-boot-1.3.2.tar.bz2
压缩包 - 然后
tar jxvf u-boot-1.3.2.tar.bz2
对压缩包进行解压,解压完成后ls
一下,可以看到解压缩后生成的目录是u-boot-1.3.2 - 接下来需要建立板级支持包,在board目录下,每一块开发板都有一个对应的目录,因此我们需要为我们的开发板建立一个目录,名字叫做eduk2410,并创建相应的文件,具体代码如下:
进到board目录创建eduk2410文件后,将smdk2410/*的内容拷贝进eduk2410
$ cd u-boot-1.3.2/board/
$ mkdir eduk2410
$ cp smdk2410/* eduk2410
将eduk2410目录下的smdk2410.c文件更名为eduk2410.c
$ cd eduk2410
$ mv smdk2410.c eduk2410.c
接下来进入eduk2410.c文件,将eduk2410.c文件中的gpio->GPBCON = 0x00044555
改为gpio->GPBCON = 0x0004455A
$ vim eduk2410.c
进入后发现文件内容非常多行,可以通过/关键字
进行查找,例如/gpio
,第一次查找如果不是想要找的行,可以按n
查找下一个,直到找到为止。找到后按i
进行插入修改,修改完成后按Esc
退出插入模式,输入:x
保存退出。
接下来修改相应的Makefile文件
$ vim Makefile
按上述方法找到COBJS := smdk2410.o flash.o
修改为COBJS := eduk2410.o flash.o
每个开发板都有一个自己的配置文件,如smdk2410开发板的配置文件为 include/configs/smdk2410.h
,我们也需要为我们的开发板建立自己的配置文件。可以直接从 smdk2410开发板的配置文件中修改而来。因此我们先把smdk2410的配置文件复制到我们开发板的配置文件当中,首先退回到u-boot-1.3.2目录下
$ cd ../../
$ cp include/configs/smdk2410.h include/configs/eduk2410.h
$ vi Makefile
同样的方法在Makefile中找到
smdk2400_config: unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2400 NULL s3c24x0
紧接这这两行添加如下两行
eduk2410_config: unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t eduk2410 NULL s3c24x0
方法:将光标放在需要复制行的行首,输入nyy
既可以复制行,n
为行数。我们需要复制两行,所以输入2yy
,再将光标移到需要粘贴的位置,按p
。粘贴完成后进行插入编辑。完成后保存退出
- 之后编译U-Boot。首先运行如下命令配置U-Boot
$ make eduk2410_config
Configuring for edul2410 board...
然后运行make命令编译
$ make
编译完成后,会在U-Boot的源代码目录下生成u-boot.bin文件。可以ls
一下进行查看。这个文件就是我们需要的二进制文件。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 100/100 | 1/1 | 10/10 | 复习了vim、gcc的相关知识 |
第二周 | 300/400 | 1/2 | 18/28 | 学习了有关gcc、gdb、静态库和动态库、Makefile的相关知识及操作 |
第三周 | 600/1000 | 0/2 | 18/46 | 学习了如何搭建Linux交叉开发环境 |
第四周 | 1000/2000 | 1/3 | 20/66 | 学习了Bootloader的配置、移植和编译 |