• u-boot平台的建立,驱动的添加,索引的创建,命令机制的实现.


    一:U-boot移植前建立自己的平台:

    关注的相关文件:
    1.u-boot- 2010.03/board/samsung/ //这个目录下需要创建自己的板级目录fsc100
    cp –a smdkc100 fsc100 //直接复制需要修改的文件并重命名
    2./u-boot-2010.03/board/samsung/fsc100 //进入刚才复制好的目录,创建必要的C文件
    mv smdkc100.c fsc100.c //直接重命名里面的可用文件
    3. vim Makefile //将这个新的C文件编译进去,修改开发板目录下的Makefile
    COBJS-y := fsc100.o //将.o配置进去
    4. cd include/configs //在 include/configs/ 中建立开发板所需要的配置头文件
    cp smdkc100.h fsc100.h //将原来可用的头文件复制一份就可以了
    5.u-boot-2010.03/Makefile //更改顶层目录下的Makefile文件,配置交叉工具链和开发板相关配置
    5.1: ifeq ($(HOSTARCH), $(ARCH)) //修改成下面的形式,其中HOSTARCH可以在u-boot-2010.03目录下的config.mk中配置
    CROSS_COMPILE ?=
    endif


    ifeq (arm, $(ARCH))
    CROSS_COMPILE ?= arm-cortex_a8-linux-gnueabi-
    endif

    5.2: fsc100_config: unconfig // 添加 fsc100 配置信息
    @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 fsc100 samsung
    s5pc1xx

    MKCONFIG = ./mkconfig fsc100 arm arm_cortexa8 fsc100 samsung s5pc1xx
    $1 $2 $3 $4 $5 $6

    MKCONFIG = ./mkconfig 表示当前目录下所有文件都能看见

    主要做了三部分工作: (上面相关参数的解析是在主目录下的:mkconfig),定义上面参数是在:include/config.mk,决定编译那些目录,最终在Makefile中运行
    a. 创建软链接
    cd include
    asm ---> asm-arm
    asm/arch ---> asm/arch-s5pc1xx
    asm-arm/proc---> asm/proc-armv

    例:
    command.c
    #include <asm-i386/config.h>
    #include <asm/config.h>


    b. 创建了include/config.mk 决定编译哪些目录
    obj += cpu/$(CPU)/start.o


    c. 创建了include/config.h 将一些默认的东西放进来,
    在include/configs/fsc100.h中决定了U-boot将那些东西编译进去,例如:#define CONFIG_CMD_NET 1



    对上面的相关注释:
    fsc100_config: 配置板子时候用到的名字 //下面相关参数的解析是在主目录下的:mkconfig
    arm : CPU的架构(ARCH)
    arm_cortexa8 : CPU的类型(CPU),其对应于cpu/arm_cortexa8子目录
    fsc100 : 开发板的型号(BOARD),对应于: board/samsung/fsc100,否则后面编译不通过
    samsung : 开发者/或经销商(vender)
    s5pc1xx : 片上系统(SOC)

    6.u-boot-2010.03 //回到源码解压后的主目录编译,只有编译通过才能进行下一步的移植,
    此时平台已经搭建完成,注意注意:源码解压不要放在根目录,切记,这会引起权限问题
    $ make distclean
    $ make fsc100_config
    $ make


    二:在U-BOOT中如何添加一个驱动(功能)
    例:
    drivers/net/dm9000x.c
    drivers/net/Makefile
    |-COBJS-$(CONFIG_DRIVER_DM9000) += dm9000x.o
    通过想使dm9000x.c编译链接进来,需要使CONFIG_DRIVER_DM9000的值配置成y



    *************************************************************
    *改动include/configs/fsc100.h
    *加上#define CONFIG_DRIVER_DM9000
    *
    * *.h 被源码包含 #ifdef CONFIG_DRIVER_DM9000
    dm9000_init();
    #endif

    **************************************************************

    在make 创建uboot时同步产生(主makefile)
    $(obj)include/autoconf.mk: $(obj)include/config.h
    446 @$(XECHO) Generating $@ ;
    447 set -e ;
    448 : Extract the config macros ;
    449 $(CPP) $(CFLAGS) -DDO_DEPS_ONLY -dM include/common.h |
    450 sed -n -f tools/scripts/define2mk.sed > $@.tmp &&
    451 mv $@.tmp $@


    *************************************************************
    *include/autoconf.mk
    * |-CONFIG_DRIVER_DM9000=y
    *
    * *.mk 被makefile包含 COBJS-$(CONFIG_DRIVER_DM9000) += dm9000x.o
    **************************************************************

    将ubuntu中建立索引文件:tags
    $ make tags //这样就创建了ctags

    linux@ubuntu:~/u-boot-2010.03$ make tags
    ctags -w -o ctags `find tools examples/standv.....
    ...................
    ..................
    -name '*.[chS]' -print`
    linux@ubuntu:~/u-boot-2010.03$ ls -l ctags
    -rw-rw-r-- 1 linux linux 17325816 Mar 31 06:03 ctags
    linux@ubuntu:~/u-boot-2010.03$

    有了索引文件就可以很方面的追踪了
    要想每次都能使用ctags,需要配置一下:
    vim /home/linux/.vimrc
    在最下面添加:set tags=/home/linux/u-boot-2010.03/ctags
    注释掉直接在前面加“,列如:”set tags=/home/linux/u-boot-2010.03/ctags

    然后想在vim编辑器中查找的时候用命令:vim -t <查找的名称> ---> vim -t main_loop
    在vim里面里面索引跳转的方法:按住CTRL鼠标左击,或者CTRL + ']'
    返回的时候:CTRL + 't'

    u-boot的命令机制

    U_BOOT_CMD(
    39 myled, CONFIG_SYS_MAXARGS, 1, do_myled,
    40 "myled - my command",
    41 "myled [on/off]"
    42 );


    #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)
    113 cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep, cmd, usage)

    #define Struct_Section __attribute__ ((unused,section (".u_boot_cmd")))

    cmd_tbl_t __u_boot_cmd_my_led Struct_Section = {
    "myled",
    CONFIG_SYS_MAXARGS,
    1,
    do_myled,
    "myled - my command",
    "myled [on/off]"

    }


    理解u-boot启动的流程:start.s,nand flash,IRAM,DRAM的关系!

    ***************************************************************************************************************************************************************
    ***************************************************************************************************************************************************************
    ***************************************************************************************************************************************************************
    ***************************************************************************************************************************************************************

  • 相关阅读:
    sql中的不常见查询
    sql中的常见报错;
    wcf_first
    均方值-数学期望-方差
    转:模块度(Modularity)与Fast Newman算法讲解与代码实现
    转:社区发现评估指标-NMI
    转:模块度(Modularity)与Fast Newman算法讲解与代码实现
    转:聚类评价指标
    转:聚类︱python实现 六大 分群质量评估指标(兰德系数、互信息、轮廓系数)
    转:用K-Means聚类分析做客户分群
  • 原文地址:https://www.cnblogs.com/cnlg/p/4382553.html
Copyright © 2020-2023  润新知