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

一、交叉编译工具(编译出能在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)

你可能感兴趣的:(嵌入式Linux)