使用芯片手册的时候,会时常的看到芯片中有的位填写的数字有保留,那是为了以后芯片升级和扩展使用的,现在是不使用。如GPF4占用的[9:8] 00 = Input,01 = Output, 10 = EINT, 11 = Reserved 保留位是为了以后进行扩展使用,现在使用不上。
使用虚拟机VMware有4种网络连接方式:网桥网络(Bridged)、网络地址翻译网络(NAT)、仅为主机网络(Host-only)和客户网络。常用的网络连接方式是前两种。
网桥网络需要连上网线才可以使用,当主机与目标板之间需要进行网络通讯的时候使用这种方式,它相当于三台处于同一网段的计算机,没有使用网线的时候使用NAT网络在主操作系统Windows与客户操作系统Linux间进行通讯。
UBUNTU中使用软件维护工具:qpt-get安装没有安装的软件
mount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了。 目前mount已经不仅仅局限于Linux了。在Windows系统下的应用也越来越广了,多用在虚拟光驱类软件上
在刚学习嵌入式linux时候,尽量使用已经制作好的工具链接
我使用的是韦东山制作好的嵌入式P40页
在程序编译器之前加上“-c”,只会进行预处理、编译和汇编源文件,但是不作连接。GCC会忽略-c选项之后任何无法识别的输入文件。
-S
编译之后立即停止,不进行汇编。GCC忽略任何不需要汇编的输入文件
-E
预处理之后即停止,不进行编译,忽略任何不需要预处理的输入文件。
-o file
指定输出文件为file,无论是预处理、编译、汇编还是连接,这个选项都可以使用。
-v
显示制作GCC工具时的自身配置命令;同时显示编译器驱动程序、预处理器、编译器的版本号。
-O2多优化一些。除了涉及空间和速度交换的优化选项,执行几乎所有的优化工作,例如不进行循环展开(loop unrolling)和函数内嵌(inling)。和-O相比增加了代码的编译时间,也提高了生成代码的运行效果。
-O3优化的更多。除了打开-O2所做的一切还打开了,“-finline-functions”选项
-O0如果指定了多个”-O”选项,不管带不带数字都是最后一个生效
gcc -v -o test main.o sub.o
gcc -v -nostartfiles -o test main.o sub.o
gcc -v -nostdlib -o test main.o sub.o
gcc -c -o main.o main.c
gcc -c -o sub.o sub.c
gcc -o test_static main.o sub.o -static
gcc -o test main.o sub.o
ls -l test test_static
-rwxrwxr-x 1 book book 8664 7月 4 14:54 test
-rwxrwxr-x 1 book book 912728 7月 4 14:53 test_static
book@www.100ask.org:~/work/test$
当不使用-static进行编译文件时,程序执行前还需要使用共享文件库文件,所以还需要将共享文件库放入文件系统中。
gcc -c -o sub.o sub.c
gcc -shared -o sub.a sub.o
以后要使用sub.c中的函数sub_fun时,再连接程序的时候,将sub.a加入即可,比如:
gcc -o test main.o ./sub.a
可以将多个文件制作成一个库文件,比如:
gcc -shared -o sub.o sub2.o sub3.o
下列选项指定搜索路径,用于查找头文件、库文件或编译器的某些成员。
arm-linux-ld 用于将多个目标文件、库文件连接成可执行文件,本小节主要介绍”-T”选项,可以直接使用它指定代码段、数据段、bss段的起始地址,也可以制定一个连接脚本在连接脚本中进行复杂的地址设置。
“-T”选项只用于连接Bootloader、内核等“没有底层软件支持”的软件,连接运行于操作系统之上的应用程序,无需指定”-T”选项,它们使用默认的方式进行连接。
-Ttext startaddr
-Tdata startaddr
-Tbss startaddr
其中的”startaddr”分别代表代码段、数据段和bss段的起始地址,它是一个十六进制的数。
在led_on的Makefile中有如下语句:
arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf
它表示的代码段运行的地址为0x0000000,由于没有定义数据段、bss段的起始地址,它们被依次放到代码段的后面
arm-linux-ld -Ttimer.lds -o timer_elf head.o int.o interrupt.o main.o
使用链接脚本timer.lds来设置可执行文件timer_elf的地址信息,timer_elf文件内容如下:
SECTIONS {
. = 30000000;
.text :{ *(.text) }
.rodata ALLGN{4} : { *(.rodata) }
.data ALIGN{4} : { *(.data) }
.bss ALIGN{4} : { *(.bss) *(COMMON)}
}
链接脚本的基本命令是SECTIONS命令,他描述了输出文件的映射图:输出文件中各段、各文件怎样设置。一个SECTIONS 内部包含了一个或多个段,段(section)是链接脚本的基本单元,他表示输入文件中的某个部分怎样放置。
arm-linux-objcopy -o binary -S elf_file bin_file
arm-linux-objdump 常用来显示二进制文本信息,本书中常用来查看反汇编代码
1.将ELF格式的文件转换为反汇编文件:
arm-linux-objdump -D elf_file > dis_file
2.将二进制文件转换为反汇编文件:
arm-linux-objdump -D -b binary -m arm bin_file > dis_file