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

如安在STM32上移植Linux?超具体的实操履历分享

发布时间:2018-10-22 00:04:25 所属栏目:业界 来源:21ic电子网
导读:【51CTO技能沙龙】10月27日,让我们配合试探AI场景化应用实现之道 刚从硬件跳槽为嵌软时,没有任何一丝的筹备。一入职,率领就交接了一项特难的使命在stm32上移植linux! 刹时我就懵了,没步伐硬着头皮上吧,先汇集资料,我之前跑的是ok6410的板子上运行的li
副问题[/!--empirenews.page--] 【51CTO技能沙龙】10月27日,让我们配合试探AI场景化应用实现之道

刚从硬件跳槽为嵌软时,没有任何一丝的筹备。一入职,率领就交接了一项特难的使命——在stm32上移植linux!

刹时我就懵了,没步伐硬着头皮上吧,先汇集资料,我之前跑的是ok6410的板子上运行的linux,此刻是在stm32上移植,早年stm32倒是玩过,研究生时代就捣鼓过它,但此刻还没从抓烙铁的硬件傍边缓过神来,就转到嵌入式软件的开拓,更头疼的是stm32没有MMU!没有MMU!找了一下,好吧,有个uClinux!

于是开始进修各类相干的常识,相识到linux的启动一样平常是u-boot——》liunx内核——》根文件体系,那么起主要做个基于stm32的u-boot,先初始化时钟、外设、间断什么的,看了韦东山先生的视频感受很好,领略了不少,从一窍不通到有点大白了。

移植u-boot到stm32f407

着实说白了u-boot就是一裸板措施,就是跟跑赛马灯、串口通讯一本性子的,而裸板措施从正点原子的stm32开拓板进修了不少,加上本身研究生阶段有点蕴蓄,起首我是参照http://www.cnblogs.com/fozu/p/3618076.html写这位博文的大神写的措施,这篇文章写得很好,后头还说明到内核了,重复看受益匪浅,这个措施不是u-boot措施可是实现的浸染一样,初始化时钟,外设。。。最后转达内核参数,跳转内核。。。,一开始用keil编译这个措施,功效一堆错误,人家用的板子和你用的板子纷歧样,硬件的led灯、串口都也许毗连纷歧样啊,好比人家用的是串口1,你用的是串口2,尚有穷乏一些头文件等等城市激发错误,以是按照本身的现实来修改,费了一阵工夫终于把错误全干掉,顺遂编译乐成。

这时用的板子是stm32f103,ST对这个板子早在08年就宣布了支持它的u-boot、Uclinux内核(率领特殊买的,说是要我比较着对应修改支持stm32f407的uClinux内核),可是只有Uclinux内核有源码,u-boot就给了个hex文件忧伤,着实cortx m3与cortx m4之前架构已经大纷歧样了,这样修改的话对付我来说无疑是很难的,我一听头都大了,又是单干,烦,没步伐照做呗!那就先弄stm32f103的,把之前谁人编译没有错误的引导措施拷入,在stm32的0x08003000的位置拷入官方提供的uClinux内核,一启动,接上串口,打开串口助手,一看啥都没有。。。

到底错在哪啦?细心想想,先是要看看最后跳转内核那步到底有没有乐成,那就先验证这一步,参照原子的IAR跳转过程,编了个赛马灯跳转措施,就是引导措施没变,拷在地点0x08000000,而赛马灯措施拷在0x08003000上,假如led灯亮灭就声名跳转无误,于是一启动,灯不亮。抓狂抓狂怎么环境啊,后细心排查发明是跳转函数,引导措施参照的是u-boot源码来编写的,内里的函数用函数指针赋个地点(0x08003000),最后跳转已往。折腾了两天最后对着原子的措施修改,灯居然可以亮灭了,我此刻想想也不知道是什么题目,不外至少此刻可以实现跳转了。

如安在STM32上移植Linux?超具体的实操履历分享

再把内核拷到0x08003000,一启动,串口助手照旧没有任何输出,这下就真的烦了,忧郁死了,stm32f103还搞不定还想搞stm32f407。。。之后开始各类找缘故起因,各类修改,率领各类催,在stm32f103和stm32f407两个板子之间这搞搞,那搞搞,苏息时刻就看看韦先生的视频,找资料看看有什么灵感,可是照旧没什么盼望。

其后在网上搜到一个哥们居然在stm32f407上移植u-boot乐成了,并且尚有启动图晒出来,这下我就想,人家可以我为什么就不能?于是继承找,终于在网上找到了这个u-boot的源码,按照本身的stm32f407的板子修改串口,时钟等,安装好对应的交错编译链,留意应该是arm-non-eabi不带linux的,由于是裸板措施不关linux啥事,然后一跑,终于在串口助手看到久违的u-boot启动图,狂喜!想想那段日子确实是在压力之下生长的,感受技能上有了很大的晋升了。

率领过来一望见有u-boot(有点对象交差了。。。)就说要把外部的SRAM驱动加上,以便于跑linux内核,这个sram只有512K,这么小能跑得了linux内核吗?这是后话,先把sram驱动加到u-boot上再说。

先参照原子的sram措施修改运行试试看看,功效可以运行可是写入再读出,有几个地点的数据总有错误,于是一向苦思冥想,想到了一个也许,驱动外部SRAM用到的是stm32的FSMC设置,它有btcr寄存器配置,分为bcr和btr配置,原子的开拓板用的是1M16位的,而我的是512k8位,在btr寄存器配置哪里应该是设成8位而不是16位,于是把相干配置位置0,这下数据正常了。

接下来就是在u-boot上添加sram的驱动,这个u-boot编写得还蛮好,不外它设置的是外部8M的SDRAM,那么我就在sdram_init()的函数上添加设置sram的代码,把原本设置sdram的代码通通删去。折腾了两天,编写修改乐成,一开机,串口助手正常输出启动信息,用u-boot的md、mw指令验证sram的驱动是否可行,之间也碰着一些题目,如在前100个地点写ff,md查察有几个地点数据差池,不是表现ff,用之前的sram裸板措施也是云云,一想软件措施必定是没题目,那就是硬件题目,好在还搞过一段时刻硬件,否则被公司硬件工程师给坑了,用万用表细心检测,公然发明sram有几个数据线虚焊了,怪不得数据有误,拿烙铁一拖,OK!数据正常了,嗯!想成为及格的嵌入式软件工程师照旧要软件硬件相团结,不能离开了硬件啊!!!!

好!至此基于stm32f407的u-boot移植乐成,外加外部2M的SRAM驱动(其后把512K进级为2M,由于其后内核内存不足跑到一半kernel panic挂了,此乃后话),最后上一张u-boot启动图。人生第一篇在CSDN的博文,但愿往后本身不绝进修技能不绝晋升,全力!

如安在STM32上移植Linux?超具体的实操履历分享

移植uClinux内核到stm32f407

上面先容了先移植基于stm32f407的u-boot,下面会讲到个中最难的移植stm32f407的内核这部门,这个内核源代码我也是在网上找到了,看先容是海外大神修改而成的,真的万分感激这位大神,网上的资源着实许多,要擅长发掘,擅长征采。

(编辑:河北网)

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

热点阅读