加入收藏 | 设为首页 | 会员中心 | 我要投稿 萍乡站长网 (https://www.0799zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

如何在STM32上移植Linux?超详细的实操经验分享

发布时间:2018-10-17 16:22:47 所属栏目:业界 来源:21ic电子网
导读:副标题#e# 【51CTO技术沙龙】10月27日,让我们共同探索AI场景化应用实现之道 刚从硬件跳槽为嵌软时,没有任何一丝的准备。一入职,领导就交代了一项特难的任务在stm32上移植linux! 瞬间我就懵了,没办法硬着头皮上吧,先搜集资料,我之前跑的是ok6410的板子

上文讲到内核运行到free init memory:8k这个地方就卡住,运行不下去了,在查阅了相关资料后,推测是缺少根文件系统所导致的,原来的内核源代码是搭配有根文件系统的bin文件,是romfs但没有源码,前面讲过我现在项目使用的是stm32f407,内部flash容量和外部SRAM都不足以拷入这个原配的romfs挂起为根文件系统来使用。

接下来就是寻找一种经济适用的文件系统来作为内核的根文件系统,从网上查阅相关资料可以知道,YAFFS2支持的是nandflash,jffs支持nor flash,这些看来对于我手上的stm32f407来说是不适用的,于是我仔细研究了stm32f103的源代码,发现它是有两种启动的方式,一种采用的是用iniramfs作为根文件系统,xip启动,在stm32f103内部flash只有512k的情况居然跑起了Uclinux,另一种是jfss2挂在外部nor flash上,显然我这种情况目前只有参考第一种方式来,采用initramfs作为根文件系统。于是开始构建initramfs相关文件。 仔细研究stm32f103 XIP启动方式的内核配置make menuconfig中, CONFIG_INITRAMFS_SOURCE=”initramfs-filelist” 而initramfs-filelist位于Uclinux/linux-2.6.x下,打开一看是这样的:

如何在STM32上移植Linux?超详细的实操经验分享

一开始我看不懂这里面的shell什么意思,网上找到一篇文章,写得很清楚,把它copy过来,学习一下:

把initramfs编译到内核里面去

使用initramfs最简单的方式,莫过于用已经做好的cpio.gz把kernel里面那个空的给换掉。这是2.6 kernel天生支持的,所以,你不用做什么特殊的设置。

kernel的config option里面有一项CONFIG_INITRAMFS_SOURCE(I.E. General setup—>Initramfs source file(s) in menuconfig)。这个选项指向放着内核打包initramfs需要的所有文件。默认情况下,这个选项是留空的,所以内核编译出来之后initramfs也就是空的,也就是前面提到的rootfs什么都不做的情形。

CONFIG_INITRAMFS_SOURCE 可以是一个绝对路径,也可以是一个从kernel’s top build dir(你敲入build或者是make的地方)开始的相对路径。而指向的目标可以有以下三种:一个已经做好的cpio.gz,或者一个已经为制作cpio.gz准备好所有内容的文件夹,或者是一个text的配置文件。第三种方式是最灵活的,我们先依次来介绍这三种方法。

1)使用一个已经做好的cpio.gz档案

If you already have your own initramfs_data.cpio.gz file (because you created it yourself, or saved the cpio.gz file produced by a previous kernel build), you can point CONFIG_INITRAMFS_SOURCE at it and the kernel build will autodetect the file type and link it into the resulting kernel image.

(编辑:萍乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读