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的关系!
***************************************************************************************************************************************************************
***************************************************************************************************************************************************************
***************************************************************************************************************************************************************
***************************************************************************************************************************************************************
u-boot平台的建立,驱动的添加,索引的创建,命令机制的实现.的更多相关文章
- mysql 添加索引 mysql 创建索引
1.添加PRIMARY KEY(主键索引) mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引 ...
- 关于如何在Android、Java等非微软平台上建立高信任的SharePoint应用程序
关于如何在非微软平台上建立高信任的SharePoint应用程序 原文 :http://blogs.msdn.com/b/kaevans/archive/2014/07/14/high-trust-sh ...
- 揭秘FaceBook Puma演变及发展——FaceBook公司的实时数据分析平台是建立在Hadoop 和Hive的基础之上,这个根能立稳吗?hive又是sql的Map reduce任务拆分,底层还是依赖hbase和hdfs存储
在12月2日下午的“大数据技术与应用”分论坛的第一场演讲中,来自全球知名互联网公司——FaceBook公司的软件工程师.研发经理邵铮就带来了一颗重磅炸弹,他将为我们讲解FaceBook公司的实时数据处 ...
- A7139 无线通信驱动(STM32) 添加FIFO扩展模式,能够发送超大数据包
A7139 拥有电磁波唤醒以及10mW的发射功率,很easy实现长距离通信,眼下測试有障碍物能够轻松达到300m以上. 通过几天的调试,眼下能够发送随意大小的数据包,大小为1-16KB.所有使用中断收 ...
- 编写Hive的UDF(查询平台数据同时向mysql添加数据)
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6812629187518530052/ 可能会有一些截图中会有错误提示,是因为本地的包一直包下载有问题,截完图已经下 ...
- MySQL 添加索引,删除索引及其用法
一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...
- Spring Boot 揭秘与实战(七) 实用技术篇 - StateMachine 状态机机制
文章目录 1. 环境依赖 2. 状态和事件 2.1. 状态枚举 2.2. 事件枚举 3. 状态机配置4. 状态监听器 3.1. 初始化状态机状态 3.2. 初始化状态迁移事件 5. 总结 6. 源代码 ...
- ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等(一)
ElasticSearch6.0 Java API 使用 排序,分组 ,创建索引,添加索引数据,打分等 如果此文章对你有帮助,请关注一下哦 1.1 搭建maven 工程 创建web工程 ...
- VMware 虚拟机添加硬盘以及为新添加的硬盘创建Samba共享 (转)
一.为VMware虚拟机添加硬盘 1. 首先在VMware虚拟机的VM->Setting子菜单中为虚拟机添加一块15G大小的SCSI类型的硬盘(注意:如果原来为IDE硬盘,SCSI类型的硬盘可能 ...
随机推荐
- 一步一步将Vim打造成C++超级IDE
文/嶽永鹏 最近从MS Windows 转到了Liunx,花了一段时间熟悉和学习Liunx环境.有时候,真的很是怀念MS Vistual Studio那种超级智能的开发环境,总是想在Vim拾起那些曾进 ...
- jquery 基础-Ajax应用
使用load()方案异步请求数据 调用格式:load(url,[data],[callback]) 参数url为加载服务器地址,可选项data参数为请求时发送的数据,callback参数为数据请求成功 ...
- 单独部署activemq-web-console (转载)
activemq-web-console的默认使用方式是通过在activemq.xml中导入jetty.xml配置一个jetty server来实现的. 其实activemq-web-console完 ...
- 荣品四核4412开发板的USB摄像头问题
RP4412开发板是荣品电子研发的一款三星四核Exynos4412评估板开发板,支持WIFI+LAN上网.蓝牙4.0.4G上网.500万自动对焦摄像头.GPS.网卡.音频,1080P HDMI音视频同 ...
- ObReferenceObjectByName函数调用WIN7下的解决
<寒江独钓 Windows内核安全编程>第4章键盘的过滤ctrl2cap代码中,ObReferenceObjectByName函数调用: [1]extern POBJECT_TYPE Io ...
- Swift运算符
运算符分类 运算符分类 一元运算符 1.负号运算符 var number1 = var number2 = -number1 2.正号运算符 //正号运算符不做任何操作 var number3 = + ...
- store前台数据过滤
最近由于客户需要对grid进行大量的检索操作,而现有的grid数据是以分页的形式从数据库端获取,每次检索都需要重新进行获取,效率很低. 因而将数据进行一次加载,每次的检索操作在前台extjs进行过滤, ...
- google closure--继承模块一:goog.inherits()
最近在项目是使用了google closure框架,深入研究了一下源码,先从最简单的继承系统吧. 废话不多说,closure继承模块主要有2个API: goog.inherits(childCtor, ...
- php常见的关键字
一 instanceof 检测一个对象是否属于某个类型 <?php class A { } $a = new A(); if($a instanceof A) { echo "yes& ...
- memo的一般方法
str := '好时代卡卡卡的水平佛单师傅开锁'; Memo1.Lines.Add(str); // 在最后加一行字符串 Memo1.Lines.Delete(x); // 删除x+1行字符串 Mem ...