主题:基于史老柒兄弟的一个帖子,拿自己身体做的科学实验 -- 帅云霓
就算是分析纯的无毒的柠檬酸三钠,也不保证里面就不含有氰化钠。
氰化钠这玩意,几十毫克就能在半小时内把一个80公斤的胖人送上西天。
所以,不允许尝化学药品是有它的道理的。
机理不一样。
而且,内核是叫不出Oh-Yeah这么senior的内容的。内核叫的都是R-O-O-M这种不成句的。那些Oh-Yeah的一定是上层APP在起作用。
所以,如果你碰到控制台不断输出Oh-Yeah的情形,说明还没有真正进内核Ring0,不过也差不多了,应该是在Ring1执行。
对于x86,内核跟驱动特权级还是有区别的,一个是ring0,一个是ring1。。
但在MIPS体系结构下,内核和驱动都是在kernel模式下,在kernel unmapped cached段,也就是0x80000000到0x9FFFFFFF的kseg0区间。只有bootloader要放在0xA0000000到0xBFFFFFFF的kseg1。
因此,对于MIPS,内核与驱动就只有逻辑上的划分了。
更有甚者,ARM7TDMI这样的no MMU处理器,APP/Driver/kernel看到的4GB空间是完全一样的。在这种系统下,folk其实就等同于vfolk,当然也是很不安全的了。
只能跑rt-linux之类的改造内核,有说2.6以后的内核吸收了这些无mmu的代码,增加了配置选项,但毕竟还不是标准通用内核。
实际上ARM9以上的处理器,基本都配备了MMU,在这些情况下,您说的完全是对的,oh-yeah是在用户空间叫的。
花谢!
至于rtlinux实际上是linux的一个进程(process),里面实时调度任务的单位是线程(thread),有点像vxWorks。各个线程看到的4GB空间,是一样的。
我做过一段时间rtlinux下的debug,对线程之间踩内存的公然践踏国际法的行为深恶痛绝,表示密切关注,强烈谴责和极大愤慨,希望它们悬崖勒马,勿谓言之不预也,可惜这些线程还是不听话。
所以没有MMU的处理器只能用在小规模嵌入应用上,否则工程大了以后,指针造成的内存问题,线程的同步问题等等,自己就把自己压垮啦。
内存问题倒是可以用工具来测试,一般可以把核心部分在PC上编写并测好了再放到板子上跑。
如果您用过DOS下的PCTools改游戏存档,您一定知道,将数字(如钱数、HP等)换算成十六进制以后,要把字节次序倒过来。这是因为,PC,也就是x86处理器,它的字节序,跟主流嵌入式处理器,ARM,Power和MIPS这样的处理器,正好是相反的。
对于驱动程序而言这一点太重要了,因为IO寄存器操作,往往是以字节甚至bit为单位的。网络协议的实现也有这个问题。PC上的0x12345678UL,在内存里是0x78 0x56 0x34 0x12,而ARM上是0x12 0x34 0x56 0x78。
大小端的问题在IDE硬盘接口上也同样存在。
用C的话,编译器可以设置大小端,
真需要倒字节序,可以写个宏,PC上编译一个配置,交叉编译一个配置。
而且ARM处理器硬件上是大小端都支持的。
总之能在PC上调的,就不上板调。
很枯燥。
对于不听话的新手罚写单元测试用例,实在不听话的,女的发配富士康,男的发配山木培训。