学号2014025687(29) 《嵌入式程序设计》第3.4周学习总结
教材学习内容总结
课本第五章《嵌入式Linux交叉开发环境的搭建》
一、搭建交叉编译环境
交叉编译器涉及软件:
binutils:主要用于生成一些辅助工具
gcc:用来生成交叉编译器的,主要生成 arm-linux-gcc交叉编译工具
二、超级终端和 minicom配置及使用
开发板上的信息显示给开发人员最常用的就是通过串口线输出到宿主机的显示器
典型的串口通信软件 超级终端、minicom
三、编译嵌入式 Linux内核
编译嵌入式 Linux内核都是通过make的不同命令来实现的,Linux内核中不同的目录结构里都有相应的 makefile,而不同的 makefile又通过彼此之间的依赖关系构成统一的整体,共同完成建立依赖关系、建立内核等功能。内核的编译根据不同的情况会有不同的步骤,但其中最主要分别为 3个步骤:内核配置、建立依赖关系、创建内核映像。
(1)内核配置:第一步内核配置中的选项主要是用户用来为目标板选择处理器架构的选项,不同的处理器架构会有不同的处理器选项
make config:基于文本的最为传统的配置界面,不推荐使用。
make menuconfig:基于文本选单的配置界面,字符终端下推荐使用。
make xconfig:基于图形窗口模式的配置界面,Xwindow下推荐使用。
make oldconfig:自动读入“.config”配置文件,并且只要求用户设定前次没有设定过的选项。
(2)建立依赖关系:由于内核源码树中的大多数文件都与一些头文件有依赖关系,因此要顺利建立内核,内核源码树中的每个Makefile都必须知道这些依赖关系。建立依赖关系通常在第一次编译内核的时候(或者源码目录树的结构发生变化的时候)进行,它会在内核源码树中每个子目录产生一个“.depend”文件
(3)创建内核映像:建立内核可以使用“make”、“make zImage”或“make bzImage”,这里建立的为压缩的内核映像。通常在Linux中,内核映像分为压缩的内核映像和未压缩的内核映像。其中,压缩的内核映像通常名为 zImage,位于“arch/$(ARCH)/boot”目录中。而未压缩的内核映像通常名为 vmlinux,位于源码树的根目录中。
四、Linux内核源码目录结构
/include子目录包含了建立内核代码时所需的大部分包个模块利用其他模块重建内核。
/init子目录包含了内核的初始化代码,这里的代码是内
起始入口。
/arch子目录包含了所有处理器体系结构特定的内核代
arm、i386、alpha。
/drivers子目录包含了内核中所有的设备驱动程序,如
SCSI设备。
/ipc子目录包含了进程间通信代码。
/kernel子目录包含了内核核心代码。
/fs子目录包含了所有的文件系统的代码,如: ext2、
/net子目录包含了内核的网络相关代码。
/mm子目录包含了所有内存管理代码。
五、boot移植
U-Boot是遵循 GPL条款的开放源码项目
(1)U-Boot源码结构
board:和一些已有开发板有关的代码,比如 makefile和U-Boot.lds等都和具体开发板的硬件和地址分配有关。
common:与体系结构无关的代码,用来实现各种命令的 C程序。
cpu:包含 CPU相关代码,其中的子目录都是以 U-BOOT所支持的CPU为名,比如有子目录 arm926ejs、mips、mpc8260和 nios等,每个特定的子目录中都包括 cpu.c和 interrupt.c,start.S等。其中cpu.c初始化 CPU、设置指令Cache和数据 Cache等;interrupt.c设置系统的各种中断和异常,比如快速中断、开关中断、时钟中断、软件中断、预取中止和未定义指令等;汇编代码文件start.S是U-BOOT启动时执行的第一个文件,它主要是设置系统堆栈和工作方式,为进入C程序奠定基础。
disk:disk驱动的分区相关代码。
doc:文档。
drivers:通用设备驱动程序,比如各种网卡、支持 CFI的 Flash、串口和 USB总线等。
fs:支持文件系统的文件,U-BOOT现在支持 cramfs、fat、fdos、jffs2和 registerfs等。
include:头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。
net:与网络有关的代码,BOOTP协议、TFTP协议、RARP协议和 NFS文件系统的实现。
lib_arm:与 ARM体系结构相关的代码。
tools:创建 S-Record格式文件和 U-BOOT images的工具。
(2) U-Boot移植主要步骤
1.建立自己的开发板类型。
2.修改程序链接地址。
3.将中断禁止的部分修改
4.直接从 Nand Flash加载代码
5.修改内存配置
6.加入 Nand Flash读函数
7.加入 Nand Flash的初始化函
8.修改 GPIO配置
9.提供 nand flash相关宏定义
10.加入 Nand Flash设备
11.设置 Nand Flash环境(common/env_nand.c)
教材学习中的问题和解决过程
教材讲解的部分内容并不能完全理解需要百度查找相关解释配合自己的理解。
课后作业中的问题和解决过程
(1)copy_file.c中不太能弄明白代码的意思
例如下
/* 以只写方式打开目标文件,若此文件不存在则创建该文件,访问权限值为644 */ dest_file = open(DEST_FILE_NAME, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
还需要在代码的学习上下更大的功夫
(2)PATH环境配置中设置了三种 里面其他的代码并没有太弄明白
附本周实验楼截图
gcc包安装完成
PATH环境配置
boot编辑练习生成的u-boot.bin
全拼名字实验
其他(感悟、思考等,可选)
本周事情有点多,不免慌神,学习任务安排进行的比较仓促但是完成的还是比较满意,如果可以更合理的安排事情处理的时间我相信会有更好的成果。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 100/100 | 1/1 | 5/5 | |
第二周 | 200/300 | 1/2 | 5/10 | |
第三周 | 300/600 | 0/2 | 1/11 | |
第四周 | 600/1200 | 1/3 | 4/15 |
参考资料
- 《嵌入式应用程序设计》学习指导