我本仁慈,奈何苍天不许
分类: LINUX
2013-12-17 15:03:00
bootloader
平台相关性 arm powerpc x86
配置 选----》配置文件
平台无关性
一、目录结构
1、平台无关目录
api 、examples : uboot给我们提供的例子
(*) common : 存放通用的命令的文件目录
cmd_xxx : 命令
env_xxx : 环境变量的命令 saveenv
disk : 硬盘操作
drivers : 存放外围芯片的驱动程序 dm9000
net : 网卡驱动
fs : 文件系统的支持
include : 通用头文件
net : 网络协议
tools : 提供了常用工具,制作uImage的工具
都是X86体系结构的
2、平台相关目录
(*) board : 存放了所有的支持的板级开发包的文件
(*) cpu : 支持的CPU类型 ARM X86 ...
lib_**
3、编译配置文件
Makefile
config.mk : 为Makefile服务的文件 config配置的服务
doc : 文档
二、简单编译的过程
1、配置,选
1.1 配交叉编译器
在顶层目录中Makefile,找CROSS_COMPILE的变量
1.2 选择编哪些文件
make 板文件名称_config
eg: make smdk2400_config
make fsc100_config
2、编译
make
*.c ----> *.o
*.o ----> -o u-boot
objcopy u-boot ----> u-boot.bin
3、烧写,测试
三、配置的过程
目的: 选
选哪些目录
选哪些.c编
Makefile 读 COBJS-y ---》
COBJS-N XXXX
COBJS- XXX
make fsc100_config
*************************************************************
fsc100_config: unconfig
@$(MKCONFIG) $(@:_config=) arm arm_cortexa8 fsc100 samsung s5pc1xx
./mkconfig fsc100 arm arm_cortexa8 fsc100 samsung s5pc1xx
#include
*************************************************************
#define CONFIG_XXXX
drivers/serial/Makefile COBJS-$(CONFIG_XXXX) += yy.o
四、Makefile 略看
1、XXX = $(shell echo "hello")
2、export 申明全局变量
3、export TOPDIR SRCTREE OBJTREE 当前代码的绝对目录
4、include $(obj)include/config.mk
include $(TOPDIR)/config.mk
ARCH CPU SOC
顶层Makefile间接包含体系结构相关目录的.mk文件
五、第一个代码在哪里
寻找链接脚本
cpu/arm_cortexa8/start.o
lib_arm/config.mk
$(SRCTREE)/cpu/$(CPU)/u-boot.lds
六、在uboot里面添加一个命令
参考已经好了的命令,他是怎么实现
int do_go (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
U_BOOT_CMD(
go, CONFIG_SYS_MAXARGS, 1, do_go,
"start application at address 'addr'",
"addr [arg ...]\n - start application at address 'addr'\n"
" passing 'arg' as arguments"
);
#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \
cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage, help}
#define Struct_Section __attribute__ ((unused,section (".u_boot_cmd")))
__u_boot_cmd_start = .;
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .;
cmd_tbl_t __u_boot_cmd_go __attribute__ ((unused,section (".u_boot_cmd"))) = {,,,,}
struct cmd_tbl_t *p;
for(p = __u_boot_cmd_start; p <= __u_boot_cmd_end; p++){
if(strcmp(p->name,input_name)){
p->cmd();
}
}
int a __attrubtue__ (xx,section(".data"))
#define ABC(name) aaaa_##name
#define ABC(name) #name ""
ABC(ee) : aaaa_ee "ee"
.text
.data
代码段 数据段
int a __attribute__(xxxxx) = xx
把C添加到编译的部分中
添加Makefile中,COBJS-
0x0 :
修改顶层目录的config.mk
在CPPFLAGS附近,添加一条
CPPFLAGS += -DCONFIG_SKIP_LOWLEVEL_INIT -DCONFIG_SKIP_RELOCATE_UBOOT
链接时的基地址修改成内存的低位置上
#vi board/samsung/fsc100/config.mk
#TEXT_BASE = 0x20008000