完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
内核启动参数
//参数标记结构 struct tag_header { u32 size; u32 tag; }; struct tag { struct tag_header hdr; union { struct tag_core core; struct tag_mem32 mem; struct tag_videotext videotext; struct tag_ramdisk ramdisk; struct tag_initrd initrd; struct tag_serialnr serialnr; struct tag_revision revision; struct tag_videolfb videolfb; struct tag_cmdline cmdline; /* * Acorn specific */ struct tag_acorn acorn; / * * DC21285 specific */ struct tag_memclk memclk; } u; }; //参数标记以ATAG_CORE开始,以ATAG_NONE结束 //以下摘在《嵌入式Linux完全开发手册》P245页,有关命令行启动参数部分的代码 char *P = "root = /dev/mtdblock 2 init = /linuxrc console == ttySAC0"; param->hdr.tag = ATAG_CMDLINE; param->hdr.size = (sizeof(struct tag_header) + strlen(p) + 1 + 4) >> 2; --此处有疑问,这个大小的计算依据在哪??? strcpy(param->u.cmdline.cmdline,p); params = tag_next(params); question(如上红色部分的代码): /* struct tag_cmdline { char cmdline[1];/* this is the minimum size */ }; */ 1. param->hdr.size 的大小是怎么计算出来的,为什么不是(sizeof(struct tag_header) + strlen(p) ) 或者 (sizeof(struct tag_header) + sizeof(struct tag_cmdline)),而是(sizeof(struct tag_header) + strlen(p) + 1 + 4) >> 2??? 2. 参看代码中struct tag_cmdline的定义,只有两个字节(如上蓝色字体部分),怎么保证strcpy(param->u.cmdline.cmdline,p),能够将参数正确保存??? |
|
相关推荐
1个回答
|
|
|
1. (sizeof(struct tag_header) + strlen(p) + 1 + 4) >> 2 应该改为:
(sizeof(struct tag_header) + strlen(p) + 1 + 3) >> 2, +4 也没问题,是为了向4取整。 你假设sizeof(struct tag_header) + strlen(p) + 1 = 100,101,102,103,104,代进去算一下就明白了 2.参看代码中struct tag_cmdline的定义,只有两个字节(如上蓝色字体部分),怎么保证strcpy(param->u.cmdline.cmdline,p),能够将参数正确保存??? 答:从cmdline[0]往后,都是这个字符串 |
|
|
|
|
只有小组成员才能发言,加入小组>>
296个成员聚集在这个小组
加入小组为什么点亮LED的例子放在NORFlash上跑会出现奇怪的现象?
2466 浏览 6 评论
2201 浏览 5 评论
韦东山老师推出的《玩转ARM裸机实战》课程将帮你以上问题一扫而光!
4828 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-3 02:40 , Processed in 0.647571 second(s), Total 76, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1738