1、嵌入式系统通用硬件组成
2、Linux系统的嵌入式的开发流程
3、Linux系统的嵌入式的结构
4、文件IO和标准IO?
5、为什么需要交叉编译
1、嵌入式系统硬件的限制(CPU处理能力不如电脑、存储空间小、网络带宽小不利于传输、安全性不如电脑、能耗问题)
2、交叉编译的定义:在X86PC机上,编译出能够在目标机上运行的程序代码(如ARM :arm-linux-)
3、交叉编译工具常用:gcc(GNU Compiler Collection,简称GCC)、GNU工具集(编译工具+调试工具+协助开发工具make等+其他工具如链接)
6、编译器的编译流程图
文本->二进制文件
编译流程补充:
指令:-E--> -S --> -c --> 生成:.c --> .i --> .S --> .o --> .elf --> .bin 编译: (可执行文件要么是a.out 要么是.elf(改名是另一回事)) |
/*makefile举例*/ all: |
附带GCC基本用法
常出现的错误:语法错误、未定义符号错误、链接错误、库错误(头文件) 所以不必慌张
7、二进制工具Binutils
addr2line的使用:在有设定了调试信息的可执行文件时,可以使用addr2line
工具来获取某个地址处的函数名和行号信息
$ addr2line -f -e binary 0x1000
其中,-f
选项表示显示函数名,-e
选项后面跟的是要查询的可执行文件名,0x1000
是要查询的地址。
输出:/path/to/source/file.c:20 表示地址0x1000
处的代码来自file.c
文件的第20行。
strip和nm
$表示分隔符
readelf
size
通过二进制工具可以对机器码进行反编译,反编译和破解的区别:破解涉及到修改源码
8、开发板启动流程
所以bootloader是硬件启动前的一段程序而已,知道这个就可以了
bootloader->kernel->aoolication
9、嵌入式Linux开发模式(串口、网口、内存、挂载、flash、nfs)
串口:tftp协议 或者ARM用到的"发送文件"
网口:nfs服务器共享目录
tftp和JTAG和nfs都是两机通讯的方式
系统移植-1-环境搭建