**《操作系统课程设计》**
**(2018/2019学年第一学期第17周)**
**班级:16计算机3班**
**姓名:康宇哲**
**操作系统课程设计**
**目 录**
[一、题目: 3](#_Toc187586616)
[二、设计目的和要求: 4](#_Toc187586617)
[三、设计思路和方法: 5](#_Toc187586618)
[四、实现的功能及说明: 19](#_Toc187586619)
[五、核心源程序代码和界面图: 31](#_Toc187586621)
[六、心得体会: 32](#_Toc187586622)
1. **题目**
> **1.** 基于树莓派的嵌入式linux操作系统设计
**二、设计目的和要求**
**1.设计目的**
> 树莓派
> OS需要有自己的调度程序。如果实现一个调度程序,还必须处理定时器中断。定时器中断意味着操作系统应该支持一些驱动程序并提供系统调用以将它们暴露给用户应用程序。在此基础上编写驱动程序使之在屏幕上写入内容并从键盘读取用户输入的指令。此外,操作系统需要能够加载和执行用户程序,因此需要支持某种文件系统并能够理解某种可执行文件格式。
> 树莓派搭载了一枚ARM架构64位4核心SOC(BCM2835)主频为700MHZ,SOC为片上操作系统支持精简指令集,并且板载了512MB
> DDR2内存。该单板机系统支持SD卡Boot启动。在BCM2835启动时会通过Boot目录启动。树莓派启动分为以下步骤
- **First stage bootloader**
> 树莓派上电后,SoC 中的 bootloader 首先被执行,其作用是挂载 SD 卡上的 FAT32
> 分区,从而加载下一阶段的 bootloader。这部分程序被固化在 SoC 的 ROM
> 中,用户无法修改。
- **Second stage bootloader (bootcode.bin)**
> 这个阶段的 bootloader 会从 SD 卡上检索 GPU 固件,将固件写入 GPU,随后启动
> GPU。
- **GPU firmware (start.elf)**
> 本阶段中,GPU
> 启动后会检索附加配置文件(config.txt、fixup.dat),根据其内容设置 CPU
> 运行参数及内存分配情况,随后将用户代码加载至内存,启动 CPU。
- **User code (kernel8.img)**
> 通常情况下,CPU 启动后便开始执行 kernel8.img
> 中的指令,初始化操作系统内核,在某些情况下,也可以被 U-BOOT 代替,由 U-BOOT
> 来加载内核。在树莓派 1 代中,User code 部分被保存在 kernel.img 文件中,2
> 代中,该文件更名为 kernel7.img,3 代中,该文件更名为
> kernel8.img,本课程设计的全部工作,都在该文件上完成。
> 综上所述,树莓派上电后的初始化工作大多是在 GPU 中完成的(GPU 内的一颗 RSIC
> 核心用于完成这些操作)。目前树莓派的 GPU bootloader
> 仍未开源,只以二进制形式发布,因此本课程设计使用了官
> 方提供的 [raspberrypi/firmware](https://github.com/raspberrypi/firmware) 官方仓库中的bootcode.bin
> 和 start.elf,直接复制到 SD 卡Boot目录。
> 树莓派刻录了官方镜像以后boot分区文件展示。我们自制的操作系统会编译成kernel.Img文件替代官方的kernel.img文件。
![](media/ee3d0bc92f6ea03fc377b681017b72d9.png)
树莓派系统启动流程示意图
![](media/8e92313d85a92516c1b7dd80b32eec04.png)
> **2.设计要求**
综上在参考了
1. 《30 天自制操作系统》
2. 《嵌入式实时操作系统 uc/os III》
3. 《linux 内核设计的艺术》
4. 《Linux 0.01 内核分析与操作系统设计》
> 这几本书以后综合自己的能力对该嵌入式树莓派操作系统提出了以下几个可以完成的功能。
1. 提供 GPIO 处理函数;
2. GUI 界面,有窗体 demo, 窗体可对鼠标操作做出相应;
3. 默认分辨率 1440×900;
4. 可显示 bmp 24 位色(true color)图片;
5. 支持鼠标键盘输入设备;
6. 多任务,默认最多 16 个任务;
7. 时间片轮转调度;
8. 任务间通信;
9. 任务阻塞,挂起;
10. 支持动态申请内存;
11. 系统最多支持 255 个 timer 定时器;
12. 支持 UART 通信。
**三、设计思路与方法**
**1.设计操作系统的基础依赖**
本课程设计要完成多进程与内存管理,需要系统时钟定时器和中断。故设计了定时器和中断函数并设置寄存器。
\#\#\#中断向量
\* 树莓派Zero搭载的是BCM2835的处理器。BMC2835 ARM1176
是ARMv6版本的。在默认条件下,处理器加电后会自动加载SD卡中的kernel.img到内存0x8000处。
\* ARM的中断向量是在地址0x00 - 0x20
\* 0x00 复位 reset
\* 0x04 未定义指令
\* 0x08 软终端 SWI
\* 0x0c 指令预取指
\* 0x10 数据访问中止
\* 0x14 保留
\* 0x18 IRQ
\* 0x1c FIQ
所以内核加载到内存做的第一件事应该是设置好中断向量。
**ARM外设中断表:**
![](media/f786cfd29da6353fbe3920af65b97459.png)
\#\#\#ARM处理器模式
ARM处理器共有7中模式,每种模式的寄存器会有些不同。OS
One默认运行在SUPERVISOR模式下,当IRQ中断发生时运行在IRQ模式。OS
One只使用了这两种模式。
CPSR中[4:0]表示处理器所处的模式
\* 0b10000 USER
\* 0b10001 FIQ
\* 0b10010 IRQ
\* 0B10011 SUPERVISOR
\* 0b10111 ABORT
\* 0b11011 UNDEFINEED
\* 0b11111 SYSTEM
设置中断向量和sp寄存器后,\`b \_cstartup\` 进入 startup.c中的\`_cstartup\`
函数。\`_cstartup\`最终会调用内核主函数 \`os_main()\`
\#\#\#中断
CPSR第7位是IRQ中断禁止位。两个相关函数\`_enable_interrupts\`和\`_enable_interrupts\`
这里定义两个头文件timer.h和interrupt.h用于计时器与中断。
中断函数参考剑桥大学树莓派操作系统设计项目和BCM2835 SOC技术手册
\#\#\#树莓派 interrupt
\#\#\#\#1.Introduction
\>\#\#\#\#\#ARM 共有两种中断源
\>\>1.来自GPU外设的中断
\>\>2.来自ARM控制外设
\>\#\#\#\#\#ARM有三种中断
\>\>1.来自ARM特殊外设
\>\>2.来自GPU外设的中断
\>\>3.特殊事件中断
\>\#\#\#\#\#ARM特殊事件中断:
\>\>1.一个定时器
\>\>2.一个邮箱(GPU)
\>\>3.两个门铃
\>\>4.两个GPU空闲中断
\>\>5.两个地址/访问错误中断
\>\#\#\#\#\#邮箱和门铃寄存器不是通用的
\>每一个中断源(GPU/ARM)都有一个使能位(R/W)和未决位(RO)
\>默认门铃中断0,1和邮箱0只可被GPU写,ARM读。门铃中断2,3和邮箱中断1相反。
\#\#\#\#2. Interrupt pending.
\>ARM有三个中断未决寄存器,一个basic pending register 两个 GPU pending
registers.
\>\#\#\#\#\#Basic pending register.
\>\>The basic pending register has interrupt pending bits for the ARM specific
interrupts .
\>\#\#\#\#\#GPU pending registers.
\>\>There are two GPU pending registers with one bit per GPU interrupt source.
\#\#\#\#3 Fast Interrupt (FIQ).
\>
The ARM also supports a Fast Interrupt (FIQ). One interrupt sources can be
selected to be connected
to the ARM FIQ input. There is also one FIQ enable. An interrupt which is
selected as FIQ should have
its normal interrupt enable bit cleared. Otherwise an normal and a FIQ interrupt
will be fired at the
same time. Not a good idea!
\#\#\#\#4 Interrupt priority.
\>
There is no priority for any interrupt. If one interrupt is much more important
then all others it can
be routed to the FIQ. Any remaining interrupts have to be processed by polling
the pending registers.
It is up to the ARM software to device a strategy. e.g. First start looking for
specific pending
bits or process them all shifting one bit at a time.
\#\#\#\#5 Registers 寄存器设置
\>The base address for the ARM interrupt register is 0x7E00B000.
\>
\>
Registers overview:
\>
0x200 IRQ basic pending
0x204 IRQ pending 1
0x208 IRQ pending 2
0x20C FIQ control
0x210 Enable IRQs 1
0x214 Enable IRQs 2
0x218 Enable Basic IRQs
0x21C Disable IRQs 1
0x220 Disable IRQs 2
0x224 Disable Basic IRQs
**中断寄存器地址表�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
毕设&课设&项目&实训-基于树莓派ZREO BCM2835的简易树莓派操作系统 计算机科学与技术 操作系统课程设计.zip (102个子文件)
font0.bin 2KB
bg.bmp 935KB
color.bmp 29KB
test.bmp 822B
Graphic.c 30KB
memory.c 8KB
task.c 8KB
linkedlist.c 7KB
debug.c 6KB
form.c 6KB
timer.c 6KB
UART.c 3KB
gpio.c 3KB
main.c 2KB
GPU.c 2KB
input.c 2KB
fifo.c 1KB
interrupt.c 724B
startup.c 435B
kernel.elf 1.09MB
66511a347f63f470d2176898e8f3aed6.emf 78KB
1d8b033a326b5f3245cb2ebdfa4a6031.emf 59KB
.gitignore 0B
Graphic.h 5KB
timer.h 5KB
task.h 2KB
linkedlist.h 2KB
Global.h 2KB
gpio.h 1KB
GPU.h 1KB
interrupt.h 1KB
UART.h 988B
input.h 858B
memory.h 847B
debug.h 766B
stdtype.h 420B
fifo.h 363B
form.h 162B
kernel.img 1020KB
27886a0fa08a692ba9f22d683ce10bf8.jpg 3.07MB
36a8b558f41441604bb41d1faea849ef.jpg 10KB
bcm2835_os - 快捷方式.lnk 806B
Makefile 2KB
kernel.map 43KB
README.md 27KB
0x05 interrupt.md 7KB
0x08 timer (ARM side).md 4KB
TroubleShooting.md 2KB
0x03 system timer.md 1KB
0x00 ARM startup.md 1KB
0x02 GPU.md 592B
0x01 gpio.md 438B
0x04 Graphic.md 55B
0x06 linkedlist.md 2B
0x0D fifo.md 2B
0x0A UART.md 2B
0x0C bmp.md 2B
0x07 task.md 2B
0x09 input.md 2B
0x0B memory.md 2B
Graphic.o 41KB
task.o 16KB
debug.o 14KB
form.o 13KB
linkedlist.o 12KB
timer.o 11KB
memory.o 11KB
main.o 9KB
input.o 8KB
UART.o 8KB
GPU.o 7KB
gpio.o 6KB
interrupt.o 6KB
fifo.o 3KB
startup.o 2KB
BCM2835-ARM-Peripherals.pdf 1.42MB
080cf7b69ab527cd1b07de491ebd31a6.png 18.69MB
051e0eee7d7dab97767b2b11702b3e26.png 164KB
03c7757d3994717dad7039b070d0ebff.png 137KB
ee3d0bc92f6ea03fc377b681017b72d9.png 90KB
0bcc2bde390d8212ba44843cbc9b6f99.png 71KB
f786cfd29da6353fbe3920af65b97459.png 67KB
e62d71367b6b0d541da2b299d4b628a2.png 63KB
ce5982225d13b4e4461cb1ee10bb9b88.png 61KB
b215a9ff7ed87d4cbb6ca3c8a3464f05.png 51KB
Raspberry_Pi_B_plus_GPIO.png 45KB
8d3933fd48943ae6978f0a5307dbf12c.png 42KB
8e92313d85a92516c1b7dd80b32eec04.png 38KB
abcc968093e49e9c1a6ecde5918138ea.png 30KB
6da0ce0c314a48acca850bf1e125a972.png 29KB
e611d77e359216ddf23971ab4dc48f45.png 26KB
beeea283c660b27eee93956b12d78550.png 26KB
d7eaee2b1564f3710a4d80561f33303e.png 25KB
7fffc0fe8fcc55d933ea3599c652e5ac.png 14KB
078e42edc88f82c153ad760b1f9438b4.png 8KB
75e884f6f95e04669ab68dd5f9fae574.png 6KB
c5512377d4833f2885ed833f37a40d8e.png 5KB
task.s 3KB
startup.s 3KB
GPU.s 342B
共 102 条
- 1
- 2
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功