操作系统项目
pk_20140716
缘起于BIOS,发展于内核,直至进程启动,电脑的世界开启了!
展开
-
从C语言到汇编(三)函数实现之栈帧
X86下C语言函数使用栈帧来实现传入参数和处理局部变量的。每个函数开始前都将执行pushl %ebpmovl %esp,%ebp结束时都将执行leaveret以sum函数为例int sum(int a,int b){ return a+b;}它的汇编代码.text.global sumsum: pushl %ebp movl %esp,%ebp movl ...原创 2019-11-21 09:57:41 · 159 阅读 · 0 评论 -
操作系统项目(一)安装as86 ld86
as86 ld86 as86和ld86是linux下的16位汇编编译器,链接器。linux内核中有部分代码需要用到as86以及ld86。而ubuntu下默认并没有安装as86和ld86。需要自行安装。安装sudo apt-get install bin86原创 2016-04-14 11:03:04 · 3226 阅读 · 0 评论 -
objdump命令的使用
objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,它还有其他作用,下面以ELF格式可执行文件test为例详细介绍:objdump -f test显示test的文件头信息objdump -d test反汇编test中的需要执行指令的那些sectionobjdump -D tes转载 2015-08-27 14:21:38 · 467 阅读 · 0 评论 -
编译遇到“__stack_chk_fail_local”错误
若在ubuntu上编译代码遇到”__stack_chk_fail_local”错误时,在makefile CFLAGS中加入”-fno-stack-protector”注意是在gcc编译时加上参数,不是在ld链接时加上原创 2015-11-19 20:41:22 · 1158 阅读 · 0 评论 -
操作系统项目(一)安装Bochs
Bochs内核编译完成后,可以使用Bochs虚拟机来加载内核。下载Bochs2.6从以下地址处下载bochs-2.6.tar.gz。 http://sourceforge.net/projects/bochs/files/bochs/2.6/安装前的准备安装Bochs前,先下载5个软件,否则make,make install时会出错。sudo apt-get install build-essen原创 2016-03-12 13:22:34 · 413 阅读 · 0 评论 -
操作系统项目(一)编译内核源码
下载完内核就可以对内核源代码编译了。本文描述的内核源码为2.6.30.1版本。解压tar jxf linux-2.6.30.1.tar.xzcd linux-2.6.30.1/生成基本的配置信息make defconfig配置使用menuconfig进行配置sudo apt-get install libncurses5-devmake menuconfig错误排除1.出现错误syscal原创 2016-03-10 18:48:31 · 849 阅读 · 0 评论 -
操作系统项目(一)获取内核源码
linux内核源码linux是开源项目,其内核源代码也可以从网络中获取。linux kernel内核下载列表 可以从上面的网址下载各个版本的linux内核。apt-get还可以通过apt-get命令获取当前操作系统对应的内核源码。查看内核版本apt-cache search linux-source获取对应版本的内核,默认安装在/usr/src目录下apt-get install linu原创 2016-03-09 19:14:34 · 765 阅读 · 0 评论 -
操作系统项目(一)安装qemu
qemuqemu是一套由法布里斯·贝拉(Fabrice Bellard)所编写的以GPL许可证分发源码的模拟处理器,在GNU/Linux平台上使用广泛。Bochs,PearPC等与其类似,但不具备其许多特性,比如高速度及跨平台的特性,通过KQEMU这个闭源的加速器,QEMU能模拟至接近真实电脑的速度。下载ubuntu下不能使用apt-get命令直接安装qemu,需要自己下载,编译。 可以从qemu原创 2016-03-15 20:06:13 · 1338 阅读 · 0 评论 -
linux1.0内核编译为elf文件格式,导致无法运行
今天,在编译运行linux1.0内核时遇到问题: 程序读取的数据不在应该的位置,结果发现原因在于在我的ubutun上编译的文件格式是elf,elf的数据段与只读数据段之间存在1KB数据的差异,但在可执行文件中数据是连在一起的,也就是加载elf文件时需要将数据段与只读数据分开,但bootsect程序只是把内核连续加载的内存中,这导致了问题。 查找解决办法时,开始希望用ld生成a.out格式的可执行原创 2015-12-11 18:33:43 · 700 阅读 · 0 评论 -
搭建linux 0.11内核编译环境(转)
不看linux内核实在没有学习linux的必要,最近又开始看《Linux内核完全注释》,现在开始看比以前感觉好多了,一些以前难以明白的问题现在也 不是什么问题。有人说时间可以解决很多问题,以前不懂,现在终于明白了。下面是我参考别人写的文章,自己照着上面在Ubuntu9.04上做了下,一切顺 利。好了,废话少说!****************************************转载 2015-12-11 15:08:14 · 5540 阅读 · 0 评论 -
objdump反汇编
objdump反汇编原创 2015-12-11 15:09:49 · 2346 阅读 · 0 评论 -
U盘启动Linux1.0
本文描述如何对linux1.0内核修改使其能从U盘启动。linux1.0内核启动开始代码原创 2015-10-30 14:24:01 · 371 阅读 · 0 评论