
网易博客搬迁之linux1.0内核
文章平均质量分 88
xiebingsuccess
这个作者很懒,什么都没留下…
展开
-
Linux内核编译的整体理解
Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统。内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制。Linux内核的一大特点就是采用了整体式结构,由很多过程组成,每个过程都可以独立编译,其模块机制又使得内核保持独立而又易于扩充。Linux发行版是在Linux内核的基础之上,与外带的应用软件和工具打包配置之后发行的版本。最初的Linux内核在1991年由当时还在芬兰赫尔辛基大学计算机系读书的Linus Torvalds开发,之后Linus很快聚集了大量来自其他自原创 2024-10-11 15:34:27 · 990 阅读 · 0 评论 -
linux 内核代码学习(九)--Linux内核启动和文件系统
2、内核的代码,这通常是从软盘启动时使用的引导的方式。内核的编译要把内核部分放到一张1.44MB的软盘上去,通常要对内核进行压缩,压缩内核的最好方法是进行重新编译内核,将一些不必要的支持去掉,如对网络和其它周边设备的支持,重要的一点是记住内核必须支持RAMDISK及ext2,否则系统不能正常引导。一个比较顺手的学习平台可以达到事半功倍的效果,这里使用的平台环境主要是利用了主机和从机间的文件共享,以及从机自带的编译环境可以比较顺利的编译busybox1.0版本,方便进行内核和文件系统的测试了学习。原创 2024-09-13 15:37:07 · 1184 阅读 · 0 评论 -
linux 内核代码学习(八)
编译linux2.4.20内核的时候,我的内核源码时放在win10的主机上,通过wmware10文件共享功能fedora10虚拟机共享内核源代码,然后利用fedora10中安装的编译环境来编译内核,由于ln命令不支持跨文件系统建立软硬连接,所以修改makefile文件,注释了箭头指示的两个地方,然后直接在内核源码include目录中按照所需要编译的目标系统,拷贝一份,将文件夹名字修改为asm。2、根据需要,要安装低版本的gcc,如果直接用"yum install gcc"安装时默认是安装最新版本的gcc。原创 2024-09-05 13:39:25 · 1437 阅读 · 0 评论 -
linux 内核代码学习(七)
1、首先,需要访问Fedora官方网站。还有一种情况就是明明自己的linux虚拟机里面安装了gcc,用which gcc也能找到安装位置,但安装vmware tools的时候输入gcc的目录总是提示不对,我的解决办法就是更换高版本的linux发现版,或者降低vmware station的版本;4、在安装vmware tools的时候通常会遇到找不到gcc和内核头文件的情况,这个时候如果不做处理而选择继续安装下去,虽然能安装成功,但是在使用的过程中总会有不理想的情况出现,比如跟主机之间的文件共享不成功。原创 2024-08-29 13:52:28 · 1201 阅读 · 0 评论 -
inux1.0内核代码学习(七) 之GRUB的编译、安装,制作GRUB启动盘,通过GRUB从硬盘启动内核、加载文件系统
先描述一个问题,制作好可以grub引导的硬盘,在虚拟机中启动时出现下面的错误:解决方法是修改myinitrd4M.img中的文件系统,/etc/inittab文件的内容如下:将tty2::askfirst:-/bin/sh修改为console::askfirst:-/bin/sh,解释原因如下:1)文件系统中/etc/inittab文件的作用:我们知道在Linux的内核被载入之...原创 2019-03-13 17:10:03 · 1879 阅读 · 2 评论 -
linux1.0内核代码学习(一)
库文件和头文件 在程序中,使用#include <stdio.h>类似的头文件stdio.h在编译器的头文件路径中,#include "abc.h"中的abc.h文件则应该在当前目录。通过对编译器指定参数-I<PATH>来指定头文件所在目录,可以用 #include <>来引用。例如:gcc -I./include hello.c,将从当前目录下的in...原创 2019-03-21 17:01:50 · 6501 阅读 · 0 评论 -
linux1.0内核代码学习(二)
这节主要是对Makefile进行详细注解:VERSION = 1 ##版本号PATCHLEVEL = 0 #补丁号ALPHA =all: Version zImage#all标示创建Makefile所知的最顶层的目标。这里就是Version和zImage。zImage就是引导启动盘映像文件,#若将其写入软盘就可以使用该软盘引导linux系统了。...原创 2019-03-21 17:00:14 · 927 阅读 · 0 评论 -
linux1.0内核代码学习(三) 之linu1.0内核运行
通过Makefile中的命令make zdisk可以制作从磁盘启动的linux1.0映像文件,由于linux1.0开发的时候当时的gun工具版本比较低,当时生成的可执行文件时a.out格式的,但现在的gun工具编译出来的可执行文件都是elf格式的,比如我的gcc版本是4.3.2的,而linux1.0的tools工具在生成可执行文件的过程中都是按照a.out格式来制作的,我曾经尝试用gcc编译a.o...原创 2019-03-21 16:58:18 · 1174 阅读 · 0 评论 -
linux1.0内核代码学习(四) 之在zboot中符号表的应用
linux1.0以上的内核是压缩过的,在启动的过程中会调用zboot/misc.c中的decompress_kernel函数解压缩,在解压缩的过程中需要得到压缩文件tools/zSystem的文件长度input_len,这是一个外部引用的变量,这个变量的值在哪里定义的,这就需要用到符号表了,是通过zBoot/piggyback.c文件中定义了input_len的符号表,并对这个变量赋值,然后再将这...原创 2019-03-21 16:55:48 · 515 阅读 · 0 评论 -
linux1.0内核代码学习(五) 之保护模式编程
linux1.0内核是压缩的zImage映像文件,其内部格式组织如下:其启动各个阶段在内存中的位置如下:下图是指zboot/zSystem中程序调用自带的解压缩程序,将tools/zSystem解压到0x100000的内存地址处,并跳转到0x100000处执行boot/head.s程序。这个阶段已经处于32位保护模式运行,使用的gdt、idt表是setup程序中设置的临时表...原创 2019-03-21 16:50:33 · 434 阅读 · 0 评论 -
linux1.0内核代码学习(六) 之内核从软盘引导,从硬盘加载根文件系统
linux1.0内核代码学习(六) 之内核从软盘引导,从硬盘加载根文件系统 环境配置如下:(在这之前用过linux0.98、1.0、1.13、1.2.13、2.0.4内核,尝试过用gcc2.2.2、gcc2.4.5、gcc2.6.3、gcc2.95.3进行编译调试都没有完全成功过,不过积累了很多经验)编译环境readhat9.0wmware虚拟机+gcc version 3.2.2内...原创 2019-03-21 16:46:38 · 657 阅读 · 0 评论