官方QQ群收藏本站

百问linux嵌入式论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 56|回复: 0

[已解决]自制bootloader启动内核卡在booting the kernel

[复制链接]

2

主题

5

帖子

33

积分

新手上路

Rank: 1

积分
33
发表于 2020-2-7 14:35:54 | 显示全部楼层 |阅读模式
本帖最后由 hellojessen 于 2020-2-8 08:20 编辑

此板块为  [ARM裸机加强版]
  • 问题所在章节:"006_u-boot_内核_根文件系统(新1期_2期间的衔接)\视频\第002课_从0写bootloader_更深刻理解bootloader\第003节_自己写bootloader之编译测试"
  • 发生问题的运行环境:jz2440裸板
  • 问题发生描述:启动内核卡在这里,内核、根文件系统没有问题。
  • bootloader问题

    bootloader问题

在boot.c中有这么一段代码,用来复制字符串:
  1. char * strcpy(char *dest, const char *src)
  2. {
  3.         char *tmp = dest;
  4.         while((*dest++ = *src++) != '0')
  5.         return tmp;
  6. }
复制代码
而在函数void setup_cmdline_tag(char *cmdline)中是这么调用的:
  1. {
  2.         params->hdr.tag = ATAG_CMDLINE;
  3.         params->hdr.size = (sizeof(struct tag_header) + strlen(cmdline) + 1 +4)>>2;
  4.        strcpy(params->u.cmdline.cmdline, cmdline);            /* 没有接收返回值的变量 */
  5.         params = tag_next(params);
  6. }

复制代码
显然没有接收strcpy函数的返回值,导致无法引导内核。
为了保持语法正确,又把这句修改为:
  1. char *tmp = strcpy(params->u.cmdline.cmdline, cmdline);
复制代码
编译后烧到开发板上仍然不能正常引导内核。由此看来,不是语法的问题。

将strcpy改成这样,内核正确引导:
  1. void strcpy(char *dest, const char *src)
  2. {

  3. while((*dest++ = *src++) != '0');

  4. }
复制代码




  • 输出的错误信息:无


my_bootloader.rar

10.06 KB, 下载次数: 0

问题bootloader

回复

使用道具 举报

技术支持
在线咨询
咨询热线
0755-86200561
微信扫一扫
获取更多资讯!

Archiver|小黑屋|百问linux嵌入式论坛     

GMT+8, 2020-2-22 11:26 , Processed in 0.057522 second(s), 9 queries , File On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表