嵌入式linux系统移植基本知识教程.docx
文本预览下载声明
系统移植第一天
系统移植重点掌握的内容
搭建交叉开发环境
移植Bootloat
移植kernel
根文件系统的制作
第一天要掌握的
配置交叉工具链和基本命令使用
制作SD卡启动盘(未完成)
搭建tftp服务器
搭建Nfs服务器
烧写uboot(未完成)
用nfs方式启动开发板跑linux(未完成)
嵌入式系统的应用领域
工业控制:工控设备、智能仪表、汽车电子、电子农业等
消费电子:信息家电、智能玩具、通信设备、移动存贮、视频监控等
医务医疗:医疗电子
军事国防:军事电子
网络设备和电子商务
嵌入式系统的定义
一般定义:以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统,对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统
广义定义:凡是带有微处理器的专用软硬件系统都可以称为嵌入式系统
通用嵌入式系统硬件组成部分
微控制器 2、晶振 3、内存(如:SRAM,SDRAM)
4存储器(如:ROM, FLASH, SD, 微硬盘)
其他外围设备接口 6、输入、输出接口
通用嵌入式系统软件组成部分
无OS嵌入式系统由应用层、驱动层和硬件层组成
有OS嵌入式系统由Applications、kernel、Driver、H/W组成
嵌入式系统LINUX交叉开发环境硬件基本组成
开发主机
目标机
连接介质
搭建嵌入式LINUX开发主环境的要工作
准备开发主机-目标机(开发板)以及二者连接介质
准备目标机代码
安装交叉工具链
开发主机上安装的软件(为方便调试)
终端软件(putty、minicom)
Tftp服务
Nfs服务
其他工具软件dnw等
为什么需要交叉编译
背景条件
嵌入式系统硬件资源限制
CPU 主频、内存容量
嵌入式系统MCU体系结构和指令集不同
ARM, MIPS, POWERPC
提高开发效率
交叉编译
在开发主机运行编译器编译内核、应用程序。内核和程序在目标机上运行
这个编译过程成为交叉编译。
*编译器运行在开发主机(通常是X86体系的PC机)上,编译出的代码是
目标机体系结构的,如:ARM
在主机除了编译还可以完成制作根文件系统的工作
嵌入式系LINUX开发,交叉编译使用开源GUN工具,gcc等。
Readelf
readelf可以显示elf软件格式执行文件信息。ELF格式是UNIX系统实验室作
为应用程序二进制接口开发的。ELF格式是UNIX/Linux平台上应用最广泛的
二进制工业标准之一。
Binutils
as
主要用来编译gcc输出的汇编文件,产生的目标文件由连接器ld连接
As -0 hello.ohello.s生成目标文件
size
列出目标文件每一段的大小以及总体的大小。
Size a.out
Size有两种输出格式,一种为”sysv”,另一种为”berkeley”,默认berkeley的格式
第一种格式以用“-A“或者—format=sysv指定,第二种格式用”-B“或”—format=
Berkeley指定“
Size a.out–A size a.out–B
nm
nm可以列出目标文件中的符号。用法虽然简单,但功能很强大
nm可以列出的符号:R 只读符号。 N调试符号 D已经初始化变量的符号。
T text段的符号,子程序都是这种符号。 U 未定义的符号。例如文件中不存在的函数。 c 未初始化的符号,比如定义了一个全局变量int a; 则a的符号就是这种类型。Libsupc++ 提供支持C++语言的库函数
strip
strip用来丢弃目标文件中的全部内容或者特定符号,减小文件体积。对于嵌入式系统,这个命令必不可少。
Stip使用
经过strip处理后的文件已经不包含符号了,可以使用nm加以验证
strings
strings用来打印某个文件的可打印字符串。
Strings hello.o
Strings –f nmdemo.o
objdup
objdump可以显示一个或者更多目标文件的信息,主要用来反汇编
objdump –d nmdemo.o
Objdump使用
-R 选项显示动态重定向的入口objdump –R hello
objcopy
objcopy可以进行目标文件格式的转换
objcopy -–gap-fill-=0xff –O srec u-boot u-boot.srec
objcopy -–gap-fill=0xff –O binary u-boot u-boot.bin
addr2line能够把程序地址转换为文件名和行号,前提是这个可执行文件包括调试符号。
如果可执行文件中没有调试符号,shell将返回??:0.
最常用的选项是“-e”用来指定文件名和地址
Gcc –o test –Wl,-Map=test.map –g test.c
Grep main te
显示全部