自己基于ARM开发的操作系统

该freele os操作系统由张同浩 muge0913 http://blog.csdn.net/muge0913 发布,仅供学习交流,请勿商业用途!!

最近很多公司发布了自己的操作系统,可见操作系统的重要性,于是本人打算写一个简单操作系统。写完该操作系统唯一的感受是:底层编程环境很恶劣,还是开发上层应用比较容易:)。现把源代码传到网上和大家分享,如有错误请大家指正:)或者您有好的建议请发送本人邮箱:

[email protected] or [email protected]

获取源码Github:https://github.com/muge0913/freele-os

博客地址:http://blog.csdn.net/muge0913/article/details/18713017

freele os介绍及使用说明pdf版:http://download.csdn.net/detail/muge0913/6878381

一、freele os开发环境

1. ubuntu 10.04

2. 开发工具:arm-linux-gcc-4.3.2、dnw、minicom

3. 开发板:tiny6410 RAM256MB ROM 2GB

二、freele os实现功能

1. K9K8G08U0A MLC2驱动

2. MMU内存重映射

3. Buddy + Slab + Malloc 内存管理机制

4. 系统时钟,系统定时器

5. 进程管理与调度(FCFS)

6. 存储设备驱动框架

7. 文件系统框架

8. ROMFS文件系统

我只是简单的实现了操作系统最重要的组成部分如内存管理、进程管理和文件系统部分。当然还有一些I/O操作J。内存管理使用的是buddy+ slab + malloc的方式。进程调度使用的FCFS方式。最后在整个文件系统框架下面添加一个romfs,当然在该文件系统框架下可以添加其他的文件系统。

我把系统定义支持3个进程(您可以通过修改一个宏定义来支持不同的进程数),其中程序1、2存放在romfs.img文件系统中,名字分别为task_ont.bin, task_two.bin。内核在启动的过程中会从romfs文件系统中读取程序1、2并加载到内存中然后调度程序分别对内核原进程和进程1、2进行调度。其中进程1只打印A字母,程序2只打印B字母,内核原进程控制流水灯的执行。

三、freele os目录结构

\

freeleos采用了和linux相似的目录管理。

boot:内核启动相关文:bootsect.Sclosck.S nand.c sdram.S

fs:和文件系统相关文件:fs_frame.cramfs.c romfs.c

include:系统使用的头文件:dr_frame.helf.h fs_frame.h irq.h sched.h string.h

init:系统主要初始化main.c

kernel:内核的主要功能实现代码:blk_drv块设备驱动文件夹,chr_drv字符设备驱动文件夹,

dr_frame.c exec.c irq_k1.c sched_test.csys_timer.c trap.S vsprintf.c

lib:程序库

mm:和内存管理相关:memory.cmmu.c

tools:存放生成romfs.img的工具。filesystemgenromfs.c task_one.c task_two.c

四、代码显示

\

五、如何运行freele os

1. 下载启动引导程序源码sys_bootsect-0.02.tar.gz

2. 下载内核源码freele-os-0.01.tar.gz

3. 下载文件系统romfs.img

4. tiny6410连接电脑

5. 打开ubuntu 终端运行以下命令打开minicom

$sudo minicom

6. tiny6410上电进入下载程序模式,如图

\

1. 选择v进入下载uboot模式

2. 编译下载的sys_bootsect-0.02.tar.gz并通过dnw下载开发板

$sudo dnw –f sys_bootsect.bin

3. 选择 k 进入下载kernel模式,但是此时我们下载时rom.img

$sudo dnw –f romfs.img

注意:romfs.img可以使用下载的,亦可以从freele-os源码中生成。

4. 让tiny6410从nand flash中启动。您会看到如下

\

1. 选择y 这样会把刚才下载的romfs.img搬到指定的地方。友善的开发板就是这么不好。很多程序也不开源,所以我只能这样才实现romfs.img的下载!!

2. 回到步骤6 编译下载freele-os-0.01.tar.gz编译后的程序

$sudo dnw –f freele_kernel.bin

3. 最后让tiny6410从nand flash启动,运行到10步骤的图示选择n。

4. 运行效果:第1图示进程1、2的效果。第2图示内核原进程效果(不清楚手机像素问题,其实就是个流水灯J)

\







\

PS:目前上传的源码只支持tiny6410,如果您要在其他平台上运行,您只需修改相应的驱动程序即可。

猜你喜欢

转载自zxxssdsd.iteye.com/blog/2104108