嵌入式Linux开发——(一)开发环境基础知识

2019-07-12 14:50发布

一、交叉编译工具(编译出能在ARM平台上运行的程序)

1)文件生成过程: ①预处理:事先将“#”开头的文件加入进去 ②编译:C/C++ ----->汇编代码 ③汇编:汇编代码----->机器代码 ④连接:将生成的目标文件(OBJ)和系统的OBJ文件、库文件 连接起来 2)编译器各个选项arm-linux-gcc选项      -o  -S  -E  -v      -Wall : 打开所有警告信息 ②arm-linux-ld选项   -T :只用于连接Bootlodar、内核等没有“底层软件支持”的软件   -Ttext   startaddr    (代码段)   -Tdata  startaddr   (数据段)   -Tbss   startaddr    (bss段) ③arm-linux-objcopy选项 用于复制一个目标文件的内容到另一个文件中,可以使用不同于源文件的格式输出目标文件,即可以进行格式转换。 arm-linux-objcopy      -O      binary    -S      elf_file     bin_file          【 elf格式----->二进制格式(bin)】 ④arm-linux-objdump选项 (将其他文件转换为反汇编文件)  arm-linux-objdump    -D   elf_file   >   dis_file                                            【elf_file----->dis_file】  arm-linux-objdump    -D    -b   binary   -m   arm   bin_file   >   dis_file     【bin_file----->dis_file】 3)Makefile用法   ①必须以Tab键缩进   ②赋值方法    immediate    =  deferred    immediate  ?=  deferred    immediate  :=  deferred    immediate  +=  deferred    延时变量:当真正使用这个变量时,这个变量的值才真正确定  “=”“?=”    立即变量:定义时它的值就已经确定  “:=”   ③常用函数   ④自动变量    $@:目标文件名    $^:  所有依赖文件名    $<:  第一个依赖文件名 4)常用ARM汇编指令及ATPCS规则   ①相对跳转命令:b、bl    Bl 除了跳转之外,还会将返回地址(bl的下一条指令的地址)保存在lr寄存器中   ②数据传送指令:mov                   地址读取指令:ldr    mov  r1,  r2          (r1 = r2)              ldr   r1,  =4096    mov  r1,  #4096  (r1=4096)   mov传输的常数必须为“立即数” ③内存访问指令:ldr、str、ldm、stm ldr  r1,  [r2,  #4]     将地址为r2+4的内存单元的数据读到r1中 ldr   r1,  [r2],   #4   将地址为r2的内存单元中数据读到r1中,然后r2+4 str   r1,  [r2]            将r1的数据存放到r2的内存单元中 str   r1,  [r2],  #4    将r1的数据存放到r2的内存单元中,然后r2+4 ldm、stm属于批量内存访问指令,只用一条指令就可以读/写多个数据 ldm / stm  {cmd}      {!}  {^}                  i:increment         ia:事后递增                  d:decrement      ib:事前递增                  a:after                da:事后递减                  b:before            db:事前递减 ④add  sub add  r1,  r2,  #1     ===>  r1=r2+1 sub  r1,  r2,  #1     ===>  r1=r2-1 ⑤程序状态寄存器的访问指令:msr  mrs msr  cpsr,  r0       ===>复制r0到cpsr中 mrs  r0,   cprs      ===>复制cprs到r0 ⑥其他伪指令 .extern               外部符号 .text                    代码段 .global  _start   定义全局 _start: ⑦汇编指令的执行条件   根据cpsr寄存器中的条件标志位决定是否执行该指令 5)ARM-THUMB子程序调用规则:ATPCS   (为了使C程序和汇编程序之间能够互相调用)   ATPCS规则:   ①寄存器使用规则:    ARM处理器中有r0--r15一共16个寄存器   ②数据栈使用规则:    数据栈:            FD : Full  Desending :        满递减            FD : Emptyl  Desending :  空递减            FA : Full  Acending :           满递增            EA : Emptyl  Acending :     空递增 ③数据传递规则 当参数个数不超过4个时,使用r0--r3这4个寄存器来传递参数 6)diff  patch命令 制作补丁: $  diff  -urNwB  linux-2.6.22.6  linux-2.6.22.6_ok  >  linux_2.6.22.6_ok.diff 打补丁: cd  linux-2.6.22.6 Patch  -p1  <  ../linux-2.6.22.6_ok.diff

二、GPIO接口

   (S3C2440 : 130个I/O端口,分为A---J共9组) 1)通过寄存器来控制GPIO引脚 GPxCON:用于选择引脚功能 GPxDAT:   用于读/写引脚数据 GPxUP:   用于确定是否使用内部上拉电阻 (x = A、B、C、.....J)