Chinaunix首页 | 论坛 | 博客
  • 博客访问: 588398
  • 博文数量: 165
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1554
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-23 22:57
个人简介

我本仁慈,奈何苍天不许

文章分类

全部博文(165)

文章存档

2018年(1)

2016年(33)

2015年(5)

2014年(34)

2013年(92)

分类: 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 >> config.h
 *************************************************************
  : uboot提供的默认配置文件,配置哪些.c编译的文件
   #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

 


 
   
   
   

阅读(654) | 评论(0) | 转发(0) |
0

上一篇:内核笔记

下一篇:编译模块进内核步骤

给主人留下些什么吧!~~