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类型的硬盘可能 ...
随机推荐
- xcode报错http
问题: Xcode项目发送网络请求时,报错:“App Transport Security has blocked a cleartext HTTP (http://) resource load s ...
- Galera集群server.cnf参数调整--前言
文档安排: 前言部分会简述下galera集群,正文中会针对我们线上的环境,在不断业务的情况下,进行参数调整的话,有些参数不能够进行配置,会以#***的形式写入配置文件中,文档也会进行进一步说明. 如果 ...
- win7优化
- js localStorage 设置和取值
定义 Storage 对象,对象有get(取值), set(设置), add(加入新值)三个方法 const Storage = {} Storage.get = function (name) { ...
- Spring 定时器的使用
spring定时器应用 相关类: org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean 配置定时远行方法 o ...
- udev
1.作为devfs的代替者,传统的devfs不能动态分配major和minor且有限,udev能像DHCP动态的分配IP一样去分配major和minor 2.device naming提供命名持久化机 ...
- 在CentOS 6.7中安装 latex2html, 实现 latex 自动转化为 word
由于latex文档生成的pdf不便于提供审阅和修改,亟需一个软件实现从latex向word文档的自动转换( 如何把Latex自动转为Word 介绍了由latex2html 可实现这个功能,这也是初衷) ...
- ASP.NET MVC 4 (三) 过滤器
先来看看一个例子演示过滤器有什么用: public class AdminController : Controller { // ... instance variables and constru ...
- Android中ActionBar的使用
简介 从Android3.0开始(targetSdkVersion或者minSdkVersion为11或者更高),ActionBar被包括在了所有主题为Theme.holo(或者子类)的主题当中. 使 ...
- Swift函数
函数 函数 介绍 // func // 在Swift中,一个个的方法就是函数 // 1.定义函数的关键字是func // 在定义函数的时候,不管有没有参数都加括号,参数写在括号中 // 在定义函数时, ...