自己想写个简单内核,有兴趣的朋友来交流下

fly_new 2009-04-06 08:48:54
几年前看过0.11版赵牛人的书,最近发现忘记的差不多了,所以想写个简单内核玩玩。考虑了一下X86和ARM,应该用ARM和大家交流会比较方便点,X86稍微复杂了一点。最主要是ARM的指令级模拟器(ARMulator)能提供最底层的硬件模拟,X86上的指令级模拟器我也不是很熟悉,而X86机器级的模拟器又可能会加到理解的难度。X86可能也有指令级的模拟,不过都不是很熟悉。
目前的打算是,基于ARM9,在AXD上跑。第一版,涉及到的所有外设,只提供一个中断控制器,用于模拟一个10ms中断(TICK),其他中断暂时不考虑,以后慢慢模拟。中断控制器用ARMulator模拟。
内核方面,我想写个单内核的,所有的系统服务只提供基本的,比如创建任务,内存分配,定时器等等。至于基于这个内核的程序开发,我打算复用ADS编译器的编译功能,暂时只支持几个常见的C标准库。
所以想找有同样想法的朋友交流下。打算三到六个月出来,由于平时工作也比较忙,时间可能只有周末交流。真诚欢迎各位提出想法。小弟在此感谢大家了!
...全文
250 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
jgw2008 2010-02-08
  • 打赏
  • 举报
回复
没有人回应了?
楼主搞定否,马上过去一年了:)
Wenxy1 2009-04-14
  • 打赏
  • 举报
回复
严重支持。
fly_new 2009-04-13
  • 打赏
  • 举报
回复
非常感谢楼上几位的关注。
其实,最开始想写这个东东,也是自己觉得有些东西不用就会淡忘,当然不是只看了下某本书。不过我不喜欢看那些讲理论的书,对于太大型的研究,如果要去实践,目前我一个人也不太可能,还是从第一步开始吧,如果后面还有毅力再继续。还有就是,我觉得操作系统也好,编程语言也好,他们之间有共同点,那就是细心的去品味。工程算法是无止境的,但是他们的的基础是来源于人的头脑,只有把最基本的原理掌握了才能谈的上融会贯通,也只要把原理掌握了很多知识又只是纸老虎一般。人总是需要脚踏实地。以前上学也没学过计算机和软件方面的,只是工作后才接触,也不过2年左右。不过以前是否学过这些,都不重要,关键是有个兴趣或者爱好。
dthxman 2009-04-12
  • 打赏
  • 举报
回复
目前刚完成了一次类似的rtos,参考了一位以前一个高手的《自己实现一个rtos》的帖子,内核是arm7的架构,不支持mmx,主要参考标准是uc/os2的源码,优先级实现也采用uc/os2的方案,信号量和通信机制简化了uc/os2的结构来实现,还加入了内存管理,自己实现了一个malloc和free,目前还有点bug,由于uc/os2没有专门的文件管理系统,所以看了赵同志的0.11内核,决定把minix1.0的文件系统简化下移植到新系统中,也算有了文件管理系统,我用的是arm的comtex-m3cpu,控制台程序我主要通过串口实现,专门开一个任务进程进行管理,连接到pc的超级终端上,这样,就可以通过pc进行系统的操作,大致实现就是这样,目前,文件系统还在移植中,别的还有点bug,需要进一步修改,不过都是业余实现的,平时比较忙,很多东西都考虑的不是很周全,还需要多看些资料充实下。我的开发板直接用公司的产品代替了,如果楼上的想自己学,建议直接用2410或者2440的开发板吧直接进入到2.6内核的linux进行学习,效果也是不错的。
lfyos 2009-04-12
  • 打赏
  • 举报
回复
楼主看到"0.11版赵牛人的书",就想写操作系统,说明楼主对操作系统的了解,知识面太窄了一些.还是多了解一些操作系统的研究进展,再写操作系统更好一些.

linux虽然出现在90年代初,在结构上,还是一个unix的clone而已.而操作系统,可不是unix. unix的鼎盛时期,是在上世纪八十年代,已经过去20多年了.甚至在八十年代,关于操作系统的研究,就已经突破了unix的结构,例如Ken Thompson本人,就终止了unix的开发,而开始开发plan -9.九十年代中期以前,研究的重点,主要在微内核,出现了mach,chorus,amoeba,plan-9,spring OS等系统,但是微内核性能低下的问题,一直没有很好地解决,也影响了这些系统的商业化.九十年代中期以后至两千年左右,研究的重点在扩充内核,也可以说是第二代微内核,这是出现了L4,spin OS, scout, exokernel,x-kernel,QNX等系统;两千年左右,出现了几个和互连网相关的操作系统研究项目,例如, 2K, webOS等;近年来,微软有一个研究项目singularity,坦尼鲍姆对操作系统可靠性的研究,IBM Blue gene计算接点上的操作系统,以及和多核相关的一些研究等,都值得我们关注.

还是要了解同行的研究工作,闭门造车总是不好的.0.11版的linux,好象是参考的86年的一本unix写的吧.个人认为0.11版的linux对操作系统的理解,实在是太UNIX了,就连Ken Thompson在八十年代就抛弃了unix,我们现在写操作系统,如果还在受0.11版的linux的影响,我们的思想实在是太古老了.这怎么能行呢?

个人意见,仅供参考.不当之处,还望见谅!




又是违规昵称 2009-04-12
  • 打赏
  • 举报
回复
支持楼主,现在有理想的人不多哦
希望你能找到你的团队和支持你的BOSS
lfyos 2009-04-12
  • 打赏
  • 举报
回复
我上博士时,写过一个内核,后来零零星星地也算是改进过几次,个人认为还是蛮好的.但是写一个内核,有什么用呢?除了自己练一练手以外,实在没有什么用途,而且太累人.

真羡慕Ken Thompson的工作环境和社会环境,在现在的社会环境下,写写一个内核除了把自己弄得很累外,不会有什么收获的.

如果非要说出来有什么用处,我只能说:写一个操作系统,可以使我们对操作系统的理解,更深入一些.操作系统是计算机系统的核心,理解操作系统,对于理解计算机系统,具有非常重要的意义.不理解操作系统,就不可能理解什么是计算机.从这一点来说,尝试写写操作系统,也许有些用吧?



yyunffu 2009-04-10
  • 打赏
  • 举报
回复
支持
sherlock_lai 2009-04-10
  • 打赏
  • 举报
回复
我曾经写过一个类似uc/os的,但是只支持16优先级。。。后来不了了之了,太累,没money没动力
gavin2415 2009-04-09
  • 打赏
  • 举报
回复
能指点一下,都需要购买那些设备,才能开发
超龄编码人 2009-04-09
  • 打赏
  • 举报
回复
写出来了 让我看看代码 开源啊
chenzijing 2009-04-09
  • 打赏
  • 举报
回复
牛啊,我们只能在外围做
fly_new 2009-04-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 qqq123 的回复:]
我对ARM不熟悉,不知道楼主的内核的子系统(任务管理,内存管理,文件系统,设备I/O系统,API,...)都支持那些?
任务管理里支持线程吗?我估计调度一定是抢占的,但支持REALTIME吗?
内存管理支持virtual memory 吗,使用MMU吗准备如何使用?
文件管理抽象virtual file switch(vfs)吗?
设备I/O系统方面实现resource管理吗?还有中断优先级管理,是如同NT哪么负载还是向linux?

还有不知道楼主OS是微内核(像Minix)…
[/Quote]

目前肯定是单内核,比宏内核还小,类似nucleus,threadx,属于RTOS。
第一版,不打算做外围设备的管理,不过这些可以下一步做二次开发;目前的我只基于ARM的IRQ或者FIQ模式,做一个简单的中断模型,如果你在中断控制器上加中断源,是可以方便注册中断的。这样可以扩展外设,不过那这个模型做开发的话,一般人有点难度。

任务管理,我不打算做成进程加线程的做法,我会把页表写死,所有任务共享虚拟空间,只是通过页表来控制用户程序和系统程序的访问权限,系统程序统统在sys模式下,用户程序在user下,通过链接器把系统text/data和用户的text/data分开。用户程序调用系统服务时,进入sys模式响应,不过这个还没想好,可能打算进入svc模式,sys只运行系统的任务,像定时器任务资源回收任务等;

内存管理当然会做,不过我不会提供像malloc这样的函数,因为我共享虚拟空间,如果多个模块,那一个入参的malloc不能把各模块的堆分开,所以我会提供内存池的概念,每个模块灵活注册自己的内存池。这个很多嵌入式开发的朋友应该知道。目前打算,提供以byte和block形式的内存管理。

至于文件系统,我在AXD上运行,暂时不做文件系统;

任务间通信,提供常见的手段,信号量,任务间邮箱;

目前很多东东都还在蕴量阶段,写这个东东的目的是自娱自乐,同时我想把它写的越简单越好,用最少的知识就能把它读明白,也希望能给喜欢研究内核的朋友一点发现。所以代码,包括bsp代码,我都尽量会用C语言表达,涉及到关键部分,我尽量加详细注释。如果在几个月后能完成,有兴趣的朋友可以交流交流。不过限于有限的知识和水平,大家别扔鸡蛋就可以了。
mimi0213kimo 2009-04-08
  • 打赏
  • 举报
回复
我也有興趣,但我是研究x86的架構。
我有模仿自己動手寫作業系統這本書寫了一個bootloader,
有興趣的人可以參考http://bboytaiwan.blogspot.com/2008/11/multiboot-usb-bootloader.html
joyself 2009-04-07
  • 打赏
  • 举报
回复
帮顶!
qqq123 2009-04-07
  • 打赏
  • 举报
回复
我对ARM不熟悉,不知道楼主的内核的子系统(任务管理,内存管理,文件系统,设备I/O系统,API,...)都支持那些?
任务管理里支持线程吗?我估计调度一定是抢占的,但支持REALTIME吗?
内存管理支持virtual memory 吗,使用MMU吗准备如何使用?
文件管理抽象virtual file switch(vfs)吗?
设备I/O系统方面实现resource管理吗?还有中断优先级管理,是如同NT哪么负载还是向linux?

还有不知道楼主OS是微内核(像Minix),宏内核(像linux),还是如同NT一样的混合内核,或者是外内核?
hefuhua 2009-04-07
  • 打赏
  • 举报
回复
精神支持楼主
qqq123 2009-04-07
  • 打赏
  • 举报
回复
去年写过一点点(0.01 version)的是基于x86的http://hi.baidu.com/yixin_huang 后来一直没有时间,最近又开始写了一段时间,估计也要五六月分才能完成。
  • 打赏
  • 举报
回复
友情支持
fly_new 2009-04-07
  • 打赏
  • 举报
回复
顶!到高手来!
加载更多回复(4)

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧