历史上的今天
返回首页

历史上的今天

今天是:2025年04月01日(星期二)

正在发生

2020年04月01日 | 移植uClinux内核到stm32f407

2020-04-01 来源:eefocus

上一篇博文讲到了先移植基于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的根文件系统来挂载。


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

推荐阅读

史海拾趣

EPCOS/TDK公司的发展小趣事

TDK,一个历史悠久的电子工业品牌,其创始人加藤与五郎和武井武两位博士于1935年在东京创办了东京电气化学工业株式会社(Tokyo Denkikagaku Kogyo K.K.),后更名为TDK株式会社。公司自创立之初就致力于磁性材料的研发,并成功地将铁氧体磁芯商业化,为收音机等产品提供了优质的音频解决方案。TDK不断推动技术创新,逐步扩展至数据存储、电子元器件等领域,并以其卓越的品质和技术赢得了全球客户的信赖。

Ferroxcube公司的发展小趣事

在21世纪初,随着电子行业的飞速发展,对于高性能磁性元件的需求也日益增长。Ferroxcube公司,作为世界第二大磁性元件生产商,凭借其卓越的技术和产品质量,迅速在市场上占据了一席之地。公司不断投入研发,推出了一系列创新的磁芯和磁环产品,深受客户好评。

在一次重要的行业展会上,Ferroxcube展示了一款新型的高性能磁芯,其优越的性能和稳定性吸引了众多行业内人士的关注。一家知名的电源制造商对这款产品表现出了浓厚的兴趣,并表达了合作的意愿。经过几轮深入的洽谈,双方达成了战略合作协议,Ferroxcube的磁芯成为了这家电源制造商的首选元件。

这一合作不仅为Ferroxcube带来了大量的订单,还提升了公司在行业内的知名度和影响力。公司借此机会加大了研发投入,进一步巩固了其在磁性元件领域的领先地位。

ETEQ Microsystems Inc公司的发展小趣事

为了进一步扩大市场份额,ETEQ Microsystems Inc开始实施全球化战略。公司在亚洲、欧洲和北美等地设立了研发中心和销售办事处,并与多家国际知名企业建立了战略合作关系。这些举措不仅增强了公司的品牌影响力,还为公司带来了更多的商业机会。

DUCATI公司的发展小趣事

在电子行业的浪潮中,ETEQ Microsystems Inc于XXXX年应运而生,创始人带着对微型电子技术的深厚理解和远见,立志打造一家具有创新精神的芯片设计企业。初创期,公司面临资金短缺、人才匮乏和市场竞争激烈的挑战。然而,通过精心研发的几款高性能低功耗芯片,ETEQ Microsystems Inc迅速在市场上打开了局面,赢得了合作伙伴的认可。

EWC Controls公司的发展小趣事

EWC Controls公司非常重视人才培养和团队建设。公司建立了一套完善的人才培养体系,通过内部培训、外部引进等方式吸引和培养了一批高素质的人才。同时,公司还注重团队合作和文化建设,鼓励员工之间的交流和合作,营造了积极向上的工作氛围。这种人才培养和团队建设的策略为公司的发展提供了有力的保障。

安国国际(ALCOR)公司的发展小趣事

安国国际在创立初期便展现出强大的研发实力。1997年,公司成功推出了世界第一颗单一整合的USB键盘集线器控制IC,这一创新成果奠定了安国在IC专业设计领域的领导地位。随后,在1998年,安国将总部迁往台湾,以便为全球客户提供更及时的技术支持和服务,同时与晶圆代工厂紧密配合,确保产品质量和技术水平。

问答坊 | AI 解惑

想做便携数码产品,视听产品开发

   本人学生,想毕业后从事便携数码产品、视听产品开发(比如MP3 、 MP4 、 PMP 、数码相框)。但是对这个行业不是很熟悉,网上这方面的资料又好少好少,现在根本就不知道该怎么进行学习。比如说,该怎么入门,该学点什么,开发难点是什 ...…

查看全部问答>

这个东东是串口转并口用的吗?具体怎么使用呢?

1) 这个东东是串口转并口用的吗? 2) 具体是在什么场合使用呢? 3) 如何使用呢? …

查看全部问答>

恢复就给分 我想上北京学嵌入式 哪里教的好?

先说明一点,希望有知道的给小弟一点建议,不知道的不要说,就说自己不清楚或者是知道一点,就行,这样我能准确的判断问题,不要担心分值的问题,只要回复我就给分,24小时之内结贴,说到做到,看我的结帖率就知道了! 小弟想问一个问题,我想上北 ...…

查看全部问答>

GetSystemMetrics返回值不正确

系统显示正常,但是 GetSystemMetrics(SM_CXSCREEN) GetSystemMetrics(SM_CYSCREEN) 这两个调用返回的数值都不正确 我感觉是BSP中的显示设置出现问题了 请问BSP中哪个位置的哪个参数决定了GetSystemMetrics函数的返回值?…

查看全部问答>

吃硬还是吃软,在这两个方向上徘徊很久了

本人是通信工程专业的,在过去的一年里在一家专业做pcb设计的公司上班。通过一年专业pcb设计工作之后,pcb设计可以说已经比较专业了。却发现,这个行业不适合我,所以想换一个行业,也为换行业准备了一段时间了。 在这段时间里,主要是学习linux操 ...…

查看全部问答>

关于ELF文件的entry point address

针对SBC8260开发板,用powerpc-linux-gcc编译linux生成的vmlinux文件是ELF格式的,它的entry point address是0xc0000000 请问: 1.entry point address是实际的物理地址吗 2.entry point address所代表的语句如_start应该就是ELF文件的程序入口点, ...…

查看全部问答>

请教一个MSP430的 问题 急!!

430做的保护器,可以控制SIM300模块发送接收短信,现在有的问题,当设备运行久了,就会出现死机,或不响应命令即不接收短信,刚开始一切正常,过差不多一天多点就出现问题了,请高人指点…

查看全部问答>

LPC1114 POV取模软件

由于POV特殊的自身特点,象素点不是点阵式排列的,用普通点阵,LCD取模软件会造成显示内容是外大内小,成扇形的,所以这个软件取出的数据克服这一特点。下一步我将准备脱离这个软件,用控制芯片实现解码    哈哈 关注的人错过88 我 ...…

查看全部问答>

tslib

(1)GIT:   git clone git://git.linuxconsulting.ro/android-tslib.gitHTTP: http://git.linuxconsulting.ro(2)./configure --prefix={}  --host=arm-linux  ac_cv_func_malloc_0_nonnull=yes…

查看全部问答>

请问在那里设置签名

请问在那里设置签名…

查看全部问答>