如何在STM32上移植Linux?超详细的实操经验分享
然后就是针对stm32f407来修改内核代码,stm32f429用的是串口3,我用的是串口1,改!时钟不对,改!储存地址不同,改!stm32f429不单是有外部的SRAM,空间8M还有NOR flash,财大气粗,资源随便用,不像我的stm32f407只有外部2M的SRAM(领导说硬件就那样,节约成本,无语。。),幸好uClinux代码是用XIP的方式来运行的,就是代码段放在内部flash中就地执行,数据段和bss段其它段就放在sram上运行,这样算算,空间还是足够的。 其间还出现这样的问题: 卡了我一个星期,当时我就百思不得其解,在创建高速缓存那里就出现内核错误运行不下去了,仔细比对了stm32f103的uClinux源代码,也没发现什么错误,一个多星期没有进展,内核恐慌我也恐慌了,幸好领导知道情况后也不催促我,而是买了一本《ARM Linux内核源代码分析》给我,叫我好好研读,解决问题,于是就看里面构建kmem cache那一篇,linux内核源码过于复杂,看得我头都大了,后来想想这不是办法啊,是不是又是硬件问题?因为原先用的是512k的sram升级到2M,公司的硬件工程师又重新改版了,于是我又用电烙铁把stm32芯片,sram芯片,和他们之间的上拉电阻,又重新焊了一遍,一上电就正常运行到下一步了,唉~之前移植u-boot的sram驱动也是硬件坑我的啊,真不敢相信我不懂点硬件的话会坑到我什么时候。。。 接着瞎捣鼓着,前后花了将近两个月,就成这样了: - 想想还真是运气好。。。 接下来遇到的问题,应该是少了根文件系统,这个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的根文件系统来挂载。 构建stm32f407-uClinux的initramfs根文件系统 (编辑:萍乡站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |