对嵌入式系统的初步理解

1、嵌入式系统通用硬件组成 

对嵌入式系统的初步理解_第1张图片

对嵌入式系统的初步理解_第2张图片 2、Linux系统的嵌入式的开发流程

对嵌入式系统的初步理解_第3张图片

3、Linux系统的嵌入式的结构

对嵌入式系统的初步理解_第4张图片

4、文件IO和标准IO?

对嵌入式系统的初步理解_第5张图片

5、为什么需要交叉编译

        1、嵌入式系统硬件的限制(CPU处理能力不如电脑、存储空间小、网络带宽小不利于传输、安全性不如电脑、能耗问题) 

        2、交叉编译的定义:在X86PC机上,编译出能够在目标机上运行的程序代码(如ARM :arm-linux-)

        3、交叉编译工具常用:gcc(GNU Compiler Collection,简称GCC)、GNU工具集(编译工具+调试工具+协助开发工具make等+其他工具如链接)

6、编译器的编译流程图

文本->二进制文件

对嵌入式系统的初步理解_第6张图片

编译流程补充:

指令:-E--> -S --> -c -->

生成:.c --> .i --> .S --> .o --> .elf --> .bin

编译:
    gcc XXX.c 成功就会生成一个可执行文件 a.out
运行:
    ./a.out
可执行文件重命名:
    gcc XXX.c -o app 编译成功就会生成app
运行:
    ./app
  编译的四个阶段:
    1.预处理 展开头文件和宏生成.i文件
        gcc -E XXX.c -o XXX.i
    2.编译 检查语法错误,生成汇编文件 .s
        gcc -S XXX.i -o XXX.s
    3.汇编 生成二进制文件 .o
        gcc -c XXX.s -o xxx.o
    4.链接(库),生成可执行文件

        (可执行文件要么是a.out 要么是.elf(改名是另一回事))
        gcc XXX.o -o app

/*makefile举例*/

all:
    arm-linux-gcc start.S -o start.o -c
   arm-linux-gcc main.c -o main.o -c               
   arm-linux-ld start.o main.o -o start.elf -Ttext=0x0//ld链接、重定位生成elf二进制文件
   arm-linux-objcopy start.elf start.bin -O binary        //生成可执行的二进制文件 objcopy表示文件格式转换
clean:
    rm *.o

附带GCC基本用法

对嵌入式系统的初步理解_第7张图片

常出现的错误:语法错误、未定义符号错误、链接错误、库错误(头文件)     所以不必慌张    

7、二进制工具Binutils

对嵌入式系统的初步理解_第8张图片

addr2line的使用:在有设定了调试信息的可执行文件时,可以使用addr2line工具来获取某个地址处的函数名和行号信息

$ addr2line -f -e binary 0x1000

其中,-f选项表示显示函数名,-e选项后面跟的是要查询的可执行文件名,0x1000是要查询的地址。

输出:/path/to/source/file.c:20  表示地址0x1000处的代码来自file.c文件的第20行。

strip和nm

对嵌入式系统的初步理解_第9张图片$表示分隔符

readelf

对嵌入式系统的初步理解_第10张图片

size

对嵌入式系统的初步理解_第11张图片

通过二进制工具可以对机器码进行反编译,反编译和破解的区别:破解涉及到修改源码

8、开发板启动流程

对嵌入式系统的初步理解_第12张图片

所以bootloader是硬件启动前的一段程序而已,知道这个就可以了

bootloader->kernel->aoolication

9、嵌入式Linux开发模式(串口、网口、内存、挂载、flash、nfs)

对嵌入式系统的初步理解_第13张图片

串口:tftp协议        或者ARM用到的"发送文件"

网口:nfs服务器共享目录

tftp和JTAG和nfs都是两机通讯的方式

 系统移植-1-环境搭建

你可能感兴趣的:(linux,运维,服务器)