社区
驱动开发/核心开发
帖子详情
谁能解释一下uboot中的这行代码
wgzymzx
2010-09-06 08:45:51
int cmd_items = &__u_boot_cmd_end -
&__u_boot_cmd_start; /* pointer arith! */
为什么这样cmd_items就得到了命令得个数?
...全文
159
14
打赏
收藏
谁能解释一下uboot中的这行代码
int cmd_items = &__u_boot_cmd_end - &__u_boot_cmd_start;/* pointer arith! */ 为什么这样cmd_items就得到了命令得个数?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
foochow
2010-09-23
打赏
举报
回复
C语言基础不过关
ask_qianru
2010-09-20
打赏
举报
回复
嘿嘿,问题的关键就是,相减的时候,编译器是按照“类型”来减的,这个帖子真有意思!反应了C编译器的强大。
hardbeyond
2010-09-17
打赏
举报
回复
受教,谢谢
frank529
2010-09-17
打赏
举报
回复
/* pointer arith! */ 指针算术
yuekejun
2010-09-15
打赏
举报
回复
受教,谢谢
coding码场
2010-09-09
打赏
举报
回复
[Quote=引用楼主 wgzymzx 的回复:]
int cmd_items = &__u_boot_cmd_end -
&__u_boot_cmd_start; /* pointer arith! */
为什么这样cmd_items就得到了命令得个数?
[/Quote]这两个指针的相减不等于内存地址的偏移量,而是指针对象的个数。
coding码场
2010-09-09
打赏
举报
回复
[Quote=引用 3 楼 wgzymzx 的回复:]
明白了,感觉应该是操作符被重载过,没时间看编译器原理。
暂这样理解吧,呵呵。
[/Quote]有没有搞错哦,uboot里的代码还“感觉应该是操作符被重载过”。
tankdin
2010-09-09
打赏
举报
回复
引用相减本来就是要除以sizeof(type)的...
这是常识啊。
所以你的问题得到的就是几条指令,因为无论如何是要除以指令长度的。
tosail
2010-09-09
打赏
举报
回复
你把结构体初始化一下,在看看。
yuekejun
2010-09-07
打赏
举报
回复
好贴,学习了
bluesea87
2010-09-06
打赏
举报
回复
应该是那样的,因为两个都指针类型的,预算的时候就会按照指针运算
wgzymzx
2010-09-06
打赏
举报
回复
明白了,感觉应该是操作符被重载过,没时间看编译器原理。
暂这样理解吧,呵呵。
wgzymzx
2010-09-06
打赏
举报
回复
切,你有仔细看过uboot的源代码没有哟,要是这么简单,我也看出来了。
struct SS
{
char *name;
int index;
};
struct SS ss[10];
int main()
{
printf("%d %d %d\n", &ss[10], &ss[0], &ss[10] - &ss[0]);
system("pause");
return 0;
}
这个例子,你仔细看看,是一个字节吗?
我编译之后运行的结果是&ss[10]=4210784, &ss[0]=4210704。
而最后结果是 10。
分析来看,应该是编译器自动将两个地址的值除了SS的结构大小,所以结果才是这样。
uboot的代码也是基于这个原来来计算命令个数的。
coding码场
2010-09-06
打赏
举报
回复
这种首尾地址相减,就可以知道中间占了多少内存空间,每个CMD占一个字节,这样一减不就知道items了嘛。
分析
UBOOT
Makefile
哪些在什么条件编译 其次,根据不同产品方案,一定要修改
代码
,不可避免要修改编译脚本 课程一
行
行
分析
uboot
Makefile, 彻底明白单个文件如何被编译,整个
uboot
目录结构及
uboot
如何生成。从而更易于理解和方便修改...
uboot
串口命令cmd
代码
解析(
uboot
2012.04.01)
一、
uboot
命令定义分析 1.1、.u_boot_cmd段 相信很多人在初次接触
uboot
都会找不到
uboot
命令表的定义在哪里,这是因为
uboot
命令表的起始地址定义在了链接脚本
中
,而
uboot
命令表的内容是使用section关键词指定变量到
uboot
命令表地址的。 在u-boot.lds文件
中
有如下一段
代码
: __u_boot_cmd_start = .;//.表示当前地址 .u_boot_cmd : { *(.u_boot_cmd) } __u_boot_cmd_end = .; 这段
代码
Uboot
的
代码
复制和重定位过程分析
首先要明确,不管启动介质是什么,Nor Flash这种可以直接运
行
代码
的存储设备也好,还是SD卡这种不能运
行
程序的存储介质也好,都会把
Uboot
的
代码
从存储介质
中
复制到RAM
中
去,然后跳转到RAM
中
去执
行
程序。
Uboot
代码
的复制是在arch/arm/lib/relocate.S文件
中
的relocate_code函数
中
实现的。相关
代码
如下: 在
Uboot
中
有一个全局变量,是一个结构体变量,其
中
存储了
Uboot
运
行
过程
中
的各种信息,重定位的地址就包含其
中
,这个结构体变量是 struct gloabl_da
Uboot
代码
结构详细分析
1. Bootloader功能分析 Bootloader(如
Uboot
、Redboot、Blob、vivi等)直接和CPU、外围硬件设备(存储器、网卡、LCD等)打交道,负责初始化硬件设备,以及负责拉起内核:建立内存空间映射图,为内核的启动运
行
做好一切准备,最后将Linux内核
代码
加载到RAM
中
运
行
。 一般来说,bootload都会提供两种操作模式: 正常启动模式:无需开发者和用户干涉,上电后自动开始运
行
,完成启动内核的任务; 下载模式(开发者模式):需要用户干预,进入下载模式,使用
uboot
命令
UBoot
源码分析整体
代码
框架(1) 2021-08-04
uboot
是什么
uboot
主要作用是初始化硬件,如果booteroadar过大就重定位,然后copy kernel 到 sdram,然后跳进去启动内核 源码结构 api 硬件无关的功能函数的API。
uboot
移植时基本不用管,这些函数是
uboot
本身使用的。 arch CPU架构的目录。里面放着很多子目录,都是各种cpu架构。 board 板级相关配置文件,针对不同平台的功能下具体的实现。 common 文件夹下放的是一些与具体硬件无关的普遍适用的一些
代码
。譬如控制台实现、crc校验的。但是更多的主
驱动开发/核心开发
21,600
社区成员
21,708
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章