搜索
bottom↓
回复: 31

linux 在stm32等没有mmu机器上的运行原理

[复制链接]

出0入0汤圆

发表于 2018-8-6 14:14:52 | 显示全部楼层 |阅读模式
最近论坛有个linux移植stm32 的帖子 ,然后谷歌了一下看到
http://nommu.org/
总结一下:
1.没有mmu的机器将会使用直接使用物理地址,所有程序将使用统一的地址空间
2.所有的应用程序必须编译成完全可重定向,就是动态链接库的编译原理,这样程序就可以被加载到任何地址运行
3.编译阶段必须固定栈区大小还必须要小,不然分配内存会有很大问题
4.内存频繁使用后将产生大量的内存碎片

简单的说多跑两次程序可能就没有足够多的连续空间可以用的了,看来没有mmu跑linux最大的问题还是内存碎片,现在也没什么好的解决方案

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入442汤圆

发表于 2018-8-6 14:41:58 来自手机 | 显示全部楼层
没有mmu的linux叫uclinux。

出0入0汤圆

发表于 2018-8-6 14:44:26 | 显示全部楼层
这个不是关键问题吧。 可以做内存池

出0入0汤圆

发表于 2018-8-6 14:58:14 | 显示全部楼层
wye11083 发表于 2018-8-6 14:41
没有mmu的linux叫uclinux。

不是,linux的主线程已经支持没有mmu的设备了,比如stm32f4就能上。论坛里面已经有人搞了、

出0入57汤圆

发表于 2018-8-6 14:59:59 | 显示全部楼层
我记得之前看过一个新闻linux将要支持不带mmu的处理器了,不过印象不深刻,想不起来在那里看到的了。

出0入0汤圆

发表于 2018-8-6 15:03:44 | 显示全部楼层
这个现象提出来好,写一个程序分配内存测试下,看看效果如何。

出0入63汤圆

发表于 2018-8-6 15:08:30 | 显示全部楼层
没有足够的连续内存空间的时候,会自动执行内存碎片整理算法的,这个不需要担心

出0入0汤圆

发表于 2018-8-6 15:12:48 | 显示全部楼层
wye11083 发表于 2018-8-6 14:41
没有mmu的linux叫uclinux。

那是N年前的了。 linux 自己开始支持没有MMU的处理器了

出0入0汤圆

发表于 2018-8-6 15:24:21 | 显示全部楼层
n_cell 发表于 2018-8-6 15:08
没有足够的连续内存空间的时候,会自动执行内存碎片整理算法的,这个不需要担心 ...

请问用的什么原理来整理内存碎片,我感觉没有mmu,很难搞这个内存碎片整理啊,比如一段内存被某个程序占用,如果这个程序不释放,除非你给他映射一个对应关系,否则碎片整理程序不能强行释放啊

出0入0汤圆

发表于 2018-8-6 15:38:38 | 显示全部楼层
我觉得,没有MMU的关键,会导致,你每做一个应用,需要考虑他在那里运行。j

出0入442汤圆

发表于 2018-8-6 15:43:11 来自手机 | 显示全部楼层
zhonghua_li 发表于 2018-8-6 15:38
我觉得,没有MMU的关键,会导致,你每做一个应用,需要考虑他在那里运行。j ...

采用相对路径运行即可。

出90入4汤圆

发表于 2018-8-6 16:26:29 | 显示全部楼层
没有MMU,是否不能支持文件系统?只能讲应用编译到“系统”中

出0入0汤圆

 楼主| 发表于 2018-8-6 18:04:00 | 显示全部楼层
zhonghua_li 发表于 2018-8-6 15:38
我觉得,没有MMU的关键,会导致,你每做一个应用,需要考虑他在那里运行。j ...

所有程序都是编译的相对路径,所以无需考虑这个问题
但问题时必须有足够长的连续内存装的下你的应用

出0入0汤圆

 楼主| 发表于 2018-8-6 18:05:17 | 显示全部楼层
john78 发表于 2018-8-6 16:26
没有MMU,是否不能支持文件系统?只能讲应用编译到“系统”中

linux基本除了进程和mmu相关的都是支持的
理论上你可以移植web服务器什么的

出0入0汤圆

 楼主| 发表于 2018-8-6 18:06:36 | 显示全部楼层
myxiaonia 发表于 2018-8-6 15:24
请问用的什么原理来整理内存碎片,我感觉没有mmu,很难搞这个内存碎片整理啊,比如一段内存被某个程序占 ...

这个还没看到解决办法,也就是说没有mmu的很容易被内存碎片堵死

出0入0汤圆

发表于 2018-8-6 20:38:19 | 显示全部楼层
内存碎片,没有mmu是非常难整理的。难点就在于,mmu将虚地址的那一次映射非常非常重要,它实际是将各个应用程序的空间隔离了。目前在没有mmu的芯片上,最好的办法就用一个内存池。这个ucLinux已经实现了。

出0入0汤圆

发表于 2018-8-6 20:39:47 | 显示全部楼层
但问题是,ulinux实现的非常不完善。不规范的程序造成死机的现象大量的存在。大家都明白,用C写程序的人,是非常牛B,哪管保护不保护。都是往死里整。

出0入0汤圆

发表于 2018-8-6 20:40:49 | 显示全部楼层
我想,这也是uclinux没有大量推广的原因。在这方面应用,uclinux和freertos是一个道理,没有什么不同。

出0入0汤圆

发表于 2018-8-6 20:42:04 | 显示全部楼层
我也在看stm32移植linux的事,也小试了一下,效果不好。当然,也是我水平低的原因。

出0入0汤圆

发表于 2018-8-7 08:32:08 | 显示全部楼层
kaixinlaohe 发表于 2018-8-6 20:40
我想,这也是uclinux没有大量推广的原因。在这方面应用,uclinux和freertos是一个道理,没有什么不同。 ...

你的意思,FREERTOS运行时间长或任务多,也会死机了???

出0入0汤圆

发表于 2018-8-7 08:40:21 | 显示全部楼层
日日♂夜夜 发表于 2018-8-6 18:05
linux基本除了进程和mmu相关的都是支持的
理论上你可以移植web服务器什么的 ...

其实我觉得意义也不太大,毕竟STM32的内存就那么点, 而Linux下大部分应用的内存使用都比较大的说。 能移植到STM32上来的 也应该有限。 当然扩展SDRAM另说

出0入0汤圆

 楼主| 发表于 2018-8-7 09:11:09 | 显示全部楼层
浮华一生 发表于 2018-8-7 08:40
其实我觉得意义也不太大,毕竟STM32的内存就那么点, 而Linux下大部分应用的内存使用都比较大的说。 能移 ...

必须要外挂的..不然内核都加载不下
还有在普通arm移植一个小应用物理内存占用不是很高,但是虚拟内存占用是比较高的
对应到stm32就是要把所有的虚拟内存占用全部换成物理内存占用,所以对于内存的压力还是很高的
在stm32下64M内存可能都没有arm9下32M内存好用

出0入0汤圆

发表于 2018-8-7 09:15:13 | 显示全部楼层
日日♂夜夜 发表于 2018-8-7 09:11
必须要外挂的..不然内核都加载不下
还有在普通arm移植一个小应用物理内存占用不是很高,但是虚拟内存占用 ...

还有就是速度。不知道STM32的SDRAM能跑到好多。还有cache的加成。 实际效果感觉小牛拉大车。linux主要也是组件多,但是STM32有是有些吃力。 定位在单片机,还是干单片机的活比较好。 哈哈。

出0入0汤圆

 楼主| 发表于 2018-8-7 09:26:36 | 显示全部楼层
浮华一生 发表于 2018-8-7 09:15
还有就是速度。不知道STM32的SDRAM能跑到好多。还有cache的加成。 实际效果感觉小牛拉大车。linux主要也 ...

这倒是,不过f7高频还有cache 可以试一下

出0入0汤圆

发表于 2018-8-7 09:27:09 | 显示全部楼层
大家多虑了,我两年前就在STM32F429上运行了linux(我的STM32F429开发板成功运行Linux4.2(uClinux)),写点单片机级别的小程序在linux上运行完全没有问题(如果让STM32运行应用处理器运行的程序另当别论)。
我觉得Linus Torvalds大神肯定都想到了这些,要是问题这么明显,它也不会让Linux主线支持noMMU的。

出0入0汤圆

发表于 2018-8-7 09:31:04 | 显示全部楼层
现在的ARM9比M4单片机还便宜,既然都上linux,还有必要吊死在单片机上

出0入0汤圆

 楼主| 发表于 2018-8-7 09:40:43 | 显示全部楼层
modbus 发表于 2018-8-7 09:31
现在的ARM9比M4单片机还便宜,既然都上linux,还有必要吊死在单片机上

这倒是,我们用的海思成品板卡也就60多还有8Mflash和网卡..
唯一的问题是达不到我们老板说的1S启动和工业温度...

出0入0汤圆

发表于 2018-8-7 10:40:01 | 显示全部楼层
内存碎片的问题应该没有那么大吧,以前的很多片子都没有MMU,
1、内存碎片算法是有一定的作用的,
2、内存池
3、尽量避免动态内存分配

我更同意楼上moudbus大虾的观点,我用MCU基本都是考虑单片就能搞定的应用,
何必在单片机上跟Linux较劲呢,上CMSIS-RTOS、freertos等系统多好,多快好省。
考虑linux下的开源应用支持就上个MPU算了。

出0入0汤圆

发表于 2018-8-7 11:06:51 | 显示全部楼层
本帖最后由 dr2001 于 2018-8-7 11:08 编辑
jameszxj 发表于 2018-8-7 10:40
内存碎片的问题应该没有那么大吧,以前的很多片子都没有MMU,
1、内存碎片算法是有一定的作用的,
2、内存 ...


没MMU需要考虑系统内存分配器的内存碎片问题,不是应用自己的

系统启动后使用确定数目的进程和线程,不会增减,粗看基本没问题;如果会不断的有进程/线程起毕,且运行时间各不相同,那存在系统内存分配存在碎片的可能

用OS的好处往往是开源库,高级编程语言,完善的网络协议栈和文件系统支持,运行效率不是主要考虑项目

出0入0汤圆

发表于 2018-8-7 12:03:58 | 显示全部楼层
日日♂夜夜 发表于 2018-8-7 09:40
这倒是,我们用的海思成品板卡也就60多还有8Mflash和网卡..
唯一的问题是达不到我们老板说的1S启动和工业 ...

这启动速度要求太变态了

出0入4汤圆

发表于 2018-8-7 15:43:57 | 显示全部楼层
modbus 发表于 2018-8-7 12:03
这启动速度要求太变态了

我现在用单片机,光初始化一堆参数,都不止1S了

出0入0汤圆

发表于 2018-12-5 11:08:55 | 显示全部楼层
MMU确实重要啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 23:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表