设为首页 收藏本站
查看: 526|回复: 0

[经验分享] U-boot引导Linux内核问题

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-11 09:05:07 | 显示全部楼层 |阅读模式
u-boot引导Linux内核有两种方式,go命令或者bootm命令。go命令引导zImage格式的内核映像,默认方式下不向内核传递参数,需要我们修改,相应的修改也有两种选择。一种是用使用struct param_struct传递内核参数,另一种是以标记列表(tagged list)的形式来传递启动参数。第一种方式设置简单,Linux2.6继续支持该格式,未来是否继续支持有待考察。实践中,用struct param_struct方式引导Linux-2.6.35没问题,但在引导Linux-2.6.39.3时失败。提示以下信息:


Root-NFS: No NFS server available, giving up.
        VFS: Unable to mount root fs via NFS, trying floppy.


怀疑是内核参数传递不正确。因此,尝试用bootm命令引导Linux-2.6.39.3。


bootm命令只能引导uImage格式的内核映像,用make uImage命令生成uImage格式的内核映像,用bootm命令引导Linux-2.6.39.3,但也不成功。经查,bootm命令默认方式也不向内核传递参数,需要在配置头文件(例如,include/configs/smdk2410.h)中定义以下两个宏:


#define CONFIG_SETUP_MEMORY_TAGS 1
        #define CONFIG_CMDLINE_TAG  1


重新编译生成u-boot.bin,烧写到开发板中并重启开发板,引导Linux-2.6.39.3仍不成功。


zImage格式的内核映像和uImage格式的内核映像文件头部分不同,后者多64个字节。注意到make uImage时的提示信息:


Load Address: 0x30108000
        Entry Point: 0x30108000


这两个地址一个是解压后的加载地址,一个是内核映像的执行入口地址,二者应该不同,有64(0x40)字节的偏移。


打开arch/arm/boot目录中的Makefile,找到$(obj)/uImage: STARTADDR=$(LOADADDR) 这一句,显然,直接把加载地址赋给了执行地址。修改如下:


$(obj)/uImage: STARTADDR=$(shell echo $(LOADADDR) | sed –e “s/..$$/40/”)


其中,sed –e “s/..$$/40/”的意思是把字符串的最后两个字节用40替换。


重新make uImage,提示信息为:


Load Address: 0x30108000
        Entry Point: 0x30108040


在开发板上重新引导内核:


# tftp 33000000 uImage
        # bootm 33000000


系统引导成功。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-149482-1-1.html 上篇帖子: U-Boot与Linux内核的交互 下篇帖子: u-boot向linux内核传递启动参数(转载)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

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