![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网易博客搬迁之linux1.0内核
xiebingsuccess
这个作者很懒,什么都没留下…
展开
-
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 · 567 阅读 · 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 · 362 阅读 · 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 · 454 阅读 · 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 · 1068 阅读 · 0 评论 -
linux1.0内核代码学习(二)
这节主要是对Makefile进行详细注解:VERSION = 1 ##版本号PATCHLEVEL = 0 #补丁号ALPHA =all: Version zImage#all标示创建Makefile所知的最顶层的目标。这里就是Version和zImage。zImage就是引导启动盘映像文件,#若将其写入软盘就可以使用该软盘引导linux系统了。...原创 2019-03-21 17:00:14 · 828 阅读 · 0 评论 -
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 · 6324 阅读 · 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 · 1720 阅读 · 2 评论