摘要: boot loader装入kernel, 然后kernel需要执行/sbin/init, 读取这个文件就必须先mount根文件系统, 早期是通过启动时的root=参数告诉内核根文件系统在哪个设备上, 随着硬件和技术的发展,现在根文件系统可能位于一个网络存储如NFS上, 可能由于RAID而散布于多个设备上, 可能位于一个加密设备上需要提供用户名和密码,这时root=参数就显得不够了. 为了应付这种局面, 先后出现两种机制来作为boot loader装载kernel到真正的/sbin/init执行这个启动过程的桥梁: initrd和initramfs, 两者有类似的地方, 比如都是由内核执行其上的 阅读全文
posted @ 2011-11-19 13:23 重归混沌 阅读(3112) 评论(0) 推荐(0) 编辑
摘要: 1、ramdisk、initrd是什么?ramdisk是一种基于内存的虚拟文件系统,通常用于放置内核的中间数据。而initrd全称为"boot loader initialized RAM disk",也就是由启动加载器所初始化的RamDisk设备,它的作用是完善内核的模块机制,让内核的初始化流程更具弹性;内核以及initrd,都由bootloader在机子启动后被加载至内存的指定位置,主要功能为按需加载模块以及按需改变根文件系统。更详细的内容,请参阅initrd的man手册,里面阐述了内核开发者对initrd制订的功能标准。命令:man initrd2、/dev/ram0 阅读全文
posted @ 2011-11-19 13:22 重归混沌 阅读(1056) 评论(0) 推荐(0) 编辑
摘要: 1.我们可以使用gf快捷键来进入任意一个被#include <header.h>的头文件. 2.使用ctrl+O来回到使用gf之前的文件中。 3.找到的一个不错的vimrc修改了一下可以自动更新ctags文件 4.增加了对系统头文件进行ctrl+]来查找的功能 5.增加了对splint进行代码检查的快捷键映射 6.如果想编译时自动定位到出错的地方,那么写一个Makefile,然后在vim中执行make应该是个不错的主意,我想! 7. 此文件在~/.vimrc或/etc/vim/vimrc"Set mapleaderlet g:mapleader = ",&quo 阅读全文
posted @ 2011-11-13 11:43 重归混沌 阅读(555) 评论(0) 推荐(1) 编辑
摘要: cortex-m3中的共享属性是用来多核处理器进行共享的一块区域! 阅读全文
posted @ 2011-11-12 21:25 重归混沌 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 在Cortex-M3中指令是3级流水线,出于对Thumb代码的兼容的考虑,读取pc时,会返回当前指令地址+4的值。但是在进入中断服务程序后,压入栈的地址是pc,而返回时也是用作pc,那么pc的值如果是当前指令加4的话就有可能返回后就漏掉一条指令。 但是事实上中断服务程序可以完美的返回。那么这中间就一定存在着某些诡异的地方。 下面来看一段测试代码: 我们可看出,pc总是指向下一条指令,那么书中的“出于对Thumb代码的兼容的考虑,读取pc时,会返回当前指令地址+4的值”的关键在于“读取”2字,如果我们使用指令(如mov)读了PC,那么返回给我们地址就是当前地址+4,如果是单片机自动... 阅读全文
posted @ 2011-11-10 21:04 重归混沌 阅读(294) 评论(0) 推荐(0) 编辑
摘要: 在编译下面一段代码时:STACK_TOP EQU 0x20002000 AREA Reset,CODE,READONLY DCD 0x20002000 DCD Start ENTRY ; CODE16 Start ldr r2,=Test LDRD r0,r1,[r2,#4] LDRD r0,r1,[r2] LDRD r0,r1,[r2] ; movs r0,r0 ; NOP ; align 4 Test DCD 0x12345678 END我发现,如果加上NOP或align4,程序就不会跑飞,否则程序就跑飞了。经调试发现: 如果不加NOP或align 4的话产生... 阅读全文
posted @ 2011-11-05 11:32 重归混沌 阅读(1275) 评论(0) 推荐(0) 编辑
摘要: 经测试证明,使用BL时,此指令做出如下操作LR=PC+T,T位是CPSR里的T位,标志着是否是thumb状态! 阅读全文
posted @ 2011-11-03 11:44 重归混沌 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 想转到linux了,于是去找linux下的串口工具,功夫不负有心人,终于找到了一个minicom软件。 首先,使用sudo apt-get install minicom来安装minicom,这个软件很小一会就安好了。安装后还是测试一下是否能用吧,毕竟第一次用。 在终端进行如下命令:sudo adduser user vboxusers 打开VirtualBox中的虚拟机设置并按如下设置: 在终端下输入sudo minicom -s出现如下界面: 选择Serial port setup选项进入如下界面并进入如下设备: 然后按Enter键,然后选择Save setup as d... 阅读全文
posted @ 2011-10-18 16:21 重归混沌 阅读(287) 评论(0) 推荐(0) 编辑
摘要: 昨天借了本书叫做<<一步一步写嵌入式操作系统>>,本着我“要学好一个平台就学它的操作系统的原则”的名言。于是就借来看看。 第一步就是就安装一个书中给出的模拟软件叫做skyeye,这个难不住我sudo apt-get install skyeye 安装后运行后,出现如下提示: Your elf file is little endian. arch: arm cpu info: armv4, arm920t, 41009200, ff00fff0, 2 mach info: name s3c2410x, mach_init addr 0x806d3c0 uart_mod:0, desc_in:. 阅读全文
posted @ 2011-10-17 13:05 重归混沌 阅读(333) 评论(0) 推荐(0) 编辑
摘要: 在一个操作系统的实现中提到了一个软件叫bochs,以前安装好了,今天重现安装一下发现又忘记怎么安装的了,所以还是把这次的过程记录下来为妙。 的ubuntu下我们可以使用sudo apt-get install bochs来安装,但是这样做有一个弊端,那就是不能使用bochs的调试功能,所以我们还是选择使用源码安装的方式来定制我们所需的功能: 1.进入解压后的bochs源码目录,在终端下输入./configure --enable-disasm --enable-debugger意思是说我们编译时使bochs带有反汇编功能和调试器功能。 2.然后出现了第一个错误:ERROR: X window. 阅读全文
posted @ 2011-10-16 14:04 重归混沌 阅读(291) 评论(0) 推荐(0) 编辑