移植uClinux内核到stm32f407

       上一篇博文讲到了先移植基于stm32f407的u-boot,本文讲到的是最难的移植stm32f407的内核,这个内核源代码我也是在网上找到了,看介绍是国外大神所修改而成的,真的万分感谢这位大神可怜,所以也要看到网上的资源其实很多,要善于挖掘,善于搜寻。

       内核代码是我无意中down下来的,我一得到代码的时候开始并没有对在stm32f407上跑uClinux有太多的信心,一是网上还没有在stm32f407跑uClinux的资料(至少我没找到过)网上都对在stm32上跑uClinux都是唱衰的态度,的确stm32跑起uClinux系统,资源是有些匮乏,而stm32f407内部flash只有1M的空间,其中u-boot占了128K,那么内核就存储在0x08020000处,剩下900k的空间使用,还有我的板子还有外部2M 的SRAM,但更要命的是得到的代码是基于stm32f429的uClinux,很多人都在stm32f429上成功运行了,但是却从没在stm32f407有过,但我已经没有退路了,项目需要、领导要求,只能硬着头皮瞎改,其实对于stm32f103改成stm32f429已经好很多了,最起码stm32f429的架构和stm32f407的架构大致相同(内部存储和时钟和gpio等略有不同),于是就按照自己手上的板子来改,期间遇到了不少的问题,也想过放弃,不过好歹坚持了下来,因为着急压力山大所以看了不少书,查了很多资料也学到了很多东西对u-boot和内核代码加深了理解,

       特别感谢的是jserv老师,我走投无路之下给他发了几封邮件,他回答了我两个极为重要的问题,建议把外部的512K换成至少2M的SRAM,不然内核就真的跑不动了,跑到一半就kernel panic….

       然后就是针对stm32f407来修改内核代码,stm32f429用的是串口3,我用的是串口1,改!时钟不对,改!储存地址不同,改!stm32f429不单是有外部的SRAM,空间8M还有NOR flash,财大气粗,资源随便用,不像我的stm32f407只有外部2M的SRAM(领导说硬件就那样,节约成本,无语。。),幸好uClinux代码是用XIP的方式来运行的,就是代码段放在内部flash中就地执行,数据段和bss段其它段就放在sram上运行,这样算算,空间还是足够的。

       其间还出现这样的问题:


dq的uClinux移植

       卡了我一个星期,当时我就百思不得其解,在创建高速缓存那里就出现内核错误运行不下去了,仔细比对了stm32f103的uClinux源代码,也没发现什么错误,一个多星期没有进展,内核恐慌我也恐慌了,幸好领导知道情况后也不催促我,而是买了一本《ARM Linux内核源代码分析》给我,叫我好好研读,解决问题,于是就看里面构建kmem cache那一篇,linux内核源码过于复杂,看得我头都大了,后来想想这不是办法啊,是不是又是硬件问题?因为原先用的是512k的sram升级到2M,公司的硬件工程师又重新改版了,于是我又用电烙铁把stm32芯片,sram芯片,和他们之间的上拉电阻,又重新焊了一遍,一上电就正常运行到下一步了,唉~之前移植u-boot的sram驱动也是硬件坑我的啊,真不敢相信我不懂点硬件的话会坑到我什么时候。。。

       接着瞎捣鼓着捣鼓着,前后花了将近两个月,就捣鼓出来了成那样:


dq的uClinux移植

- 想想还真是运气好。。。


       接下来遇到的问题,应该是少了根文件系统,这个uClinux代码原来是配有根文件系统的,是romfs,但是存储空间不够了。

       uClinux的根文件系统未能挂载起来,因为系统原来配置的根文件系统是romfs,是基于stm32f429的,stm32f429的内部flash存储空间有2M,romfs占用空间为300多kB,这样存放显然是充足的,但是对于stm32f407来说,它的内部flash存储空间为1M,这样存放的话,存储空间是不够的(u-boot占用空间0x08000000-0x08020000,内核占用空间约为0x08020000-0x080BB000,约620多KB,那么只有剩下约250多KB的空间供根文件系统存放),所以根据这个情况,我想是另外搭建占用内存空间更小的initramfs作为uClinux的根文件系统来挂载。

       想想万里长征就剩最后一步了,于是开始恶补根文件系统的知识,待续…..

  • 14
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
### 回答1: STM32是一种基于ARM Cortex-M处理器的微控制器,Linux是一种开源操作系统。STM32可以运行Linux操作系统,但需要在STM32上安装Linux内核并配置文件系统。使用STM32运行Linux操作系统需要具备一定的编程和系统管理知识。 ### 回答2: Linux STM32是针对ST公司的STM32系列MCU开发的一种开发环境。STM32系列是一款广泛使用的32位ARM Cortex-M微控制器,其特点是性能高、功耗低、集成度高、易用性强等。 使用Linux STM32,开发者可以利用Linux的强大功能来进行STM32 MCU的开发。首先,通过Linux的驱动程序可以轻松地对STM32系列MCU进行各种外设的控制,如GPIO、UART、SPI、I2C等。其次,Linux STM32提供了丰富的开源软件包,如uClinux、RT-Thread等,可以大大简化开发过程,提高开发效率。此外,Linux STM32还支持多线程和多进程的并发执行,方便开发者编写多任务应用程序。 通过使用Linux STM32,开发者可以利用Linux成熟的开发工具链,如GCC编译器、GDB调试器等,进行STM32 MCU的编译、调试工作。同时,Linux STM32还支持多种开发语言,如C、C++、Python等,灵活满足不同开发者的需求。 总的来说,Linux STM32是一个强大的开发平台,为开发者提供了丰富的资源和工具来简化STM32 MCU的开发工作。通过使用Linux STM32,开发者可以更加高效地开发出功能强大、稳定可靠的STM32应用程序。 ### 回答3: Linux是一种自由和开放源代码的操作系统,而STM32是一种由意法半导体(STMicroelectronics)推出的32位微控制器系列。下面我将使用300字回答关于LinuxSTM32的相关内容。 Linux是一种跨平台的操作系统,可以运行在各种硬件设备上,包括个人电脑、服务器、嵌入式设备等。它具有高度的灵活性和可定制性,以及强大的稳定性和安全性。Linux操作系统提供了许多功能强大的工具和程序库,方便开发人员进行软件开发和调试工作。 STM32是一种流行的嵌入式系统芯片,广泛应用于各种嵌入式设备中,如家电、智能手机、汽车电子、医疗设备等。STM32系列微控制器提供了强大的计算和控制能力,以及丰富的外设接口和通信功能。开发人员可以使用C/C++等编程语言编写应用程序,并通过编译、下载和调试工具将程序烧录到STM32芯片中。 对于LinuxSTM32的结合,开发人员可以利用Linux的强大的功能和丰富的工具生态系统来开发嵌入式应用程序。通过在Linux操作系统上运行嵌入式应用程序,可以实现对设备的控制和管理,以及与其他设备和网络的通信。开发人员可以使用Linux提供的的驱动程序和协议栈来实现与STM32芯片的通信和数据交换。 此外,利用STM32系列芯片的低功耗特性,可以有效地结合Linux操作系统来实现嵌入式设备的能耗优化。通过合理地利用Linux的电源管理功能,可以进一步降低设备的功耗,延长设备的使用时间。 综上所述,LinuxSTM32的结合为开发嵌入式设备提供了一个强大的平台。开发人员可以充分利用Linux操作系统的功能和STM32系列芯片的性能,实现高效、稳定和安全的嵌入式应用程序的开发和部署。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值