一: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的关系!

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

u-boot平台的建立,驱动的添加,索引的创建,命令机制的实现.的更多相关文章

  1. mysql 添加索引 mysql 创建索引

    1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引 ...

  2. 关于如何在Android、Java等非微软平台上建立高信任的SharePoint应用程序

    关于如何在非微软平台上建立高信任的SharePoint应用程序 原文 :http://blogs.msdn.com/b/kaevans/archive/2014/07/14/high-trust-sh ...

  3. 揭秘FaceBook Puma演变及发展——FaceBook公司的实时数据分析平台是建立在Hadoop 和Hive的基础之上,这个根能立稳吗?hive又是sql的Map reduce任务拆分,底层还是依赖hbase和hdfs存储

    在12月2日下午的“大数据技术与应用”分论坛的第一场演讲中,来自全球知名互联网公司——FaceBook公司的软件工程师.研发经理邵铮就带来了一颗重磅炸弹,他将为我们讲解FaceBook公司的实时数据处 ...

  4. A7139 无线通信驱动(STM32) 添加FIFO扩展模式,能够发送超大数据包

    A7139 拥有电磁波唤醒以及10mW的发射功率,很easy实现长距离通信,眼下測试有障碍物能够轻松达到300m以上. 通过几天的调试,眼下能够发送随意大小的数据包,大小为1-16KB.所有使用中断收 ...

  5. 编写Hive的UDF(查询平台数据同时向mysql添加数据)

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6812629187518530052/ 可能会有一些截图中会有错误提示,是因为本地的包一直包下载有问题,截完图已经下 ...

  6. MySQL 添加索引,删除索引及其用法

    一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

  7. Spring Boot 揭秘与实战(七) 实用技术篇 - StateMachine 状态机机制

    文章目录 1. 环境依赖 2. 状态和事件 2.1. 状态枚举 2.2. 事件枚举 3. 状态机配置4. 状态监听器 3.1. 初始化状态机状态 3.2. 初始化状态迁移事件 5. 总结 6. 源代码 ...

  8. ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等(一)

    ElasticSearch6.0  Java API  使用     排序,分组 ,创建索引,添加索引数据,打分等 如果此文章对你有帮助,请关注一下哦 1.1 搭建maven 工程  创建web工程 ...

  9. VMware 虚拟机添加硬盘以及为新添加的硬盘创建Samba共享 (转)

    一.为VMware虚拟机添加硬盘 1. 首先在VMware虚拟机的VM->Setting子菜单中为虚拟机添加一块15G大小的SCSI类型的硬盘(注意:如果原来为IDE硬盘,SCSI类型的硬盘可能 ...

随机推荐

  1. 一步一步将Vim打造成C++超级IDE

    文/嶽永鹏 最近从MS Windows 转到了Liunx,花了一段时间熟悉和学习Liunx环境.有时候,真的很是怀念MS Vistual Studio那种超级智能的开发环境,总是想在Vim拾起那些曾进 ...

  2. jquery 基础-Ajax应用

    使用load()方案异步请求数据 调用格式:load(url,[data],[callback]) 参数url为加载服务器地址,可选项data参数为请求时发送的数据,callback参数为数据请求成功 ...

  3. 单独部署activemq-web-console (转载)

    activemq-web-console的默认使用方式是通过在activemq.xml中导入jetty.xml配置一个jetty server来实现的. 其实activemq-web-console完 ...

  4. 荣品四核4412开发板的USB摄像头问题

    RP4412开发板是荣品电子研发的一款三星四核Exynos4412评估板开发板,支持WIFI+LAN上网.蓝牙4.0.4G上网.500万自动对焦摄像头.GPS.网卡.音频,1080P HDMI音视频同 ...

  5. ObReferenceObjectByName函数调用WIN7下的解决

    <寒江独钓 Windows内核安全编程>第4章键盘的过滤ctrl2cap代码中,ObReferenceObjectByName函数调用: [1]extern POBJECT_TYPE Io ...

  6. Swift运算符

    运算符分类 运算符分类 一元运算符 1.负号运算符 var number1 = var number2 = -number1 2.正号运算符 //正号运算符不做任何操作 var number3 = + ...

  7. store前台数据过滤

    最近由于客户需要对grid进行大量的检索操作,而现有的grid数据是以分页的形式从数据库端获取,每次检索都需要重新进行获取,效率很低. 因而将数据进行一次加载,每次的检索操作在前台extjs进行过滤, ...

  8. google closure--继承模块一:goog.inherits()

    最近在项目是使用了google closure框架,深入研究了一下源码,先从最简单的继承系统吧. 废话不多说,closure继承模块主要有2个API: goog.inherits(childCtor, ...

  9. php常见的关键字

    一 instanceof 检测一个对象是否属于某个类型 <?php class A { } $a = new A(); if($a instanceof A) { echo "yes& ...

  10. memo的一般方法

    str := '好时代卡卡卡的水平佛单师傅开锁'; Memo1.Lines.Add(str); // 在最后加一行字符串 Memo1.Lines.Delete(x); // 删除x+1行字符串 Mem ...