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的配置、移植和编译|

posted on 2017-05-14 19:42  愚yyy  阅读(146)  评论(0编辑  收藏  举报