BSS段
可执行程序包括BSS段、数据段、代码段(也称文本段)。
BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。
注意和数据段的区别,BSS存放的是未初始化的全局变量和静态变量,数据段存放的是初始化后的全局变量和静态变量。
UNIX下可使用size命令查看可执行文件的段大小信息。如size u-boot。
vi的使用之替换字符
:%s/cs8900/dm9000/ 替换每一行的第一个 cs8900 为 dm9000
:%s/cs8900/dm9000/g 替换每一行中所有 cs8900为 dm9000
链接命令
lndir path
kernal下载地址 https://www.kernel.org/pub/linux/kernel/
为了使uboot在前4k
arch/arm/cpu/arm920t/u-boot.lds
board/samsung/mini2440.a
TEXT_BASE和链接地址
链接完成后的地址并不是0x00000000,而是0x33f80000,当然机器码没有改变。
至于TEXT_BASE的定义是在board/***/config.mk文件里
uboot根目录下config.mk文件中
LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE)
将链接的地址改为0x33f80000
常见编译错误及解决方法
warning: implicit declaration of function 's3c2440_get_base_nand
上网查了下原因,原来有两种情况会产生这种情况
1 没有把函数所在的c文件生成.o目标文件
2 在函数所在的c文件中定义了,但是没有在与之相关联的.h文件中声明
error: dereferencing pointer to incomplete type
你的指针,有一个类型,这个类型是不完全的。也就是说,你只给出了这个类型的声明,没有给出其定义。这里的类型多半是结构,联合之类的东西