一: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. SHAREPOINT 2013 列表之间相互关联

    修改内容 1.增加列表设置,隐藏Aid字段操作 SharePoint 列表之间相互关联 例如两张列表之间的父子关系. 思路如下: 列表中新增列表项后会有一个唯一的ID,我们获取到该ID赋予子表即可将两 ...

  2. FPGA 相同模块 VIVADO synthesis综合后

    显示所用的LUT as Memory结果不一致可能是什么原因导致的?

  3. .NET牛人需要了解的问题[转]

    任何一个使用.NET的人 描述线程与进程的区别? 什么是Windows服务,它的生命周期与标准的EXE程序有什么不同 Windows上的单个进程所能访问的最大内存量是多少?它与系统的最大虚拟内存一样吗 ...

  4. vue-todolist

    look:先看效果: 在浏览器的地址输入localhost:8080时,页面展示的是coding和walking两个无序序列,接着在输入框输入任何字符再敲enter回车键时,列表中又增加了一列,但是只 ...

  5. table表格宽度固定,同时td内容过长也不会被撑开

    table表格宽度固定,同时td内容过长也不会被撑开,设置如下css: table{table-layout:fixed;word-break:break-all;}

  6. iOS安全相关学习资料

    https://github.com/zhengmin1989/iOS_ICE_AND_FIRE  (冰与火代码) http://weibo.com/zhengmin1989?is_hot=1 (蒸米 ...

  7. ionic单页面应用中微信分享的问题总结

    首先说一下 ionic 是单页面应用,也就是说整个项目就有一个index.html, 那么问题就就来了, 如果我们不同的页面要分享给大家的是不同的链接和图片,应该怎么去做呢? 这就是我们今天要总结的东 ...

  8. css3 transfrom变换

    Transform 转换 CSS3中的转换允许我们对元素进行旋转.缩放.移动或倾斜,它分为2D转换 或3D转换 在CSS2时代,如果要做一些图片转换角度,都依赖于图片.flash或JavaScript ...

  9. 如何在Linux服务器中隐藏PHP版本

    通常,大多数默认设置安装的web服务器存在信息泄露,这其中之一就是PHP.PHP 是如今流行的服务端html嵌入式语言(之一?).在如今这个充满挑战的时代,有许多攻击者会尝试发现你服务端的漏洞.因此, ...

  10. android 通过WiFi进行adb调试

    第一种方式: 1.把Android SDK的下的 platform-tools 目录 加入到系统的path变量中 打开cmd命令行 输入adb 显示如下图则为设置成功 2.打开手机 下载一个叫WiFi ...