《linux 内核完全剖析》编译linux 0.12 内核 Ubuntu 64bits 环境

我×。。。终于好了,大概3 4个小时吧。。。各种毛刺问题。终究还是闯过来了。。。。

[email protected]:~/Downloads/linux-0.00-050613/linux-0.00$ make

ld -s -x -M head.o  -o system > System.map

dd bs=32 if=boot of=Image skip=1

16+0 records in

16+0 records out

512 bytes (512 B) copied, 0.000605945 s, 845 kB/s

dd bs=512 if=system of=Image skip=2 seek=1

14+1 records in

14+1 records out

7632 bytes (7.6 kB) copied, 0.000221138 s, 34.5 MB/s

sync

去这里下载 linux -0.00-041217.zip或者050613的zip都行

http://oldlinux.org/Linux.old/bochs/

不算最痛苦的,遇到很多问题,还好有前人帮忙,希望我的blog也能帮到别人。

编译过程中遇到的很多问题,下面的up都有遇到,并给出的详细解答。。。。好人啊。。。致敬

http://chfj007.blog.163.com/blog/static/173145044201132523034138/

head.s:148: Error: invalid instruction suffix for `pop‘ head.s:149: Error: operand type mismatch

会出现上面这种很多suffix前缀不正确的指令错误提示。解决问题的办法很简单,也就是32位汇编在64位的机子上跑要解决的问题

在相对应的汇编代码的开头加个

.code32

OK

同样,会遇到

head.s:105: Warning: using `%ebx‘ instead of `%bx‘ due to `l‘ suffix

这个把相应的bx寄存器改成ebx就OK

head.s:248: Error: `%al‘ not allowed with `movl‘

head.s:257: Error: `%al‘ not allowed with `movl‘

这个把movl改成movb,这里应该是一个错误,而不是一个平台差异照成的

因为我觉得al是8bit的movl是16bit的,即使在32位平台上也是不对的

Over。  还是很舒坦的。。。平安无事的编译成功了

时间就这样慢慢的流淌,当我们还是流动的长河,当我们变成静静的湖泊

《linux 内核完全剖析》编译linux 0.12 内核 Ubuntu 64bits 环境,布布扣,bubuko.com

时间: 2024-10-11 23:19:09

《linux 内核完全剖析》编译linux 0.12 内核 Ubuntu 64bits 环境的相关文章

Linux 0.12 内核管理存储器

其分段,用分段的机制把进程间的虚拟地址分隔开. 每一个进程都有一张段表LDT.整个系统有一张GDT表.且整个系统仅仅有一个总页表. 其地址翻译过程为: 程序中给出的32位地址(实际上被看做段内偏移地址),再依据代码段寄存器CS中的16位段选择子,可在GDT或LDT中查找对应的段描写叙述符.从段描写叙述符中提取段的基地址,与程序给出的32位地址相加.得到结果为线性地址. 依据此线性地址查找系统页文件夹表,再查二级或是多级页表,终于得到物理地址. 此方式系统仅仅有一个4G的线性地址空间由各进程共享(

Linux 0.12内核与现代内核在内存管理上的区别

0.12内核的内存管理比较简单粗暴,内核只用了一个页目录,只能映射4G的线性空间,所以每个进程的虚拟空间(逻辑空间)只能给到64M,最多64个进程:每个进程都有对应的任务号nr,当一个进程需要分配进程空间时,只需要nr乘以64M就可以得出该进程空间的线性起始地址.然后该进程的代码段.数据段描述符里面的基址字段会被设定为(nr x 64M),同时可以为进程分配页目录项和页目录表用以承载映射关系. 之后如果进程要访问自己空间内的某个地址时就会首先用基地址与程序内32位偏移地址(逻辑地址)合成出线性地

Ubuntu下编译3.0.4内核

Ubuntu下编译3.0.4内核 Linux内核3.0版本发布已有一段时间了,不知道这个版本号大跃进的内核是否好用.目前各个发行版的linux还仍未采用3.0的内核,因此可以自己动手编译内核来感受一下!趁着这次编译内核的机会可以再熟悉一下编译内核的步骤. 1.下载并解压内核到任意目录 从源码官网下载最新的内核源码3.0.4,可以解压至任意目录,我放在主目录下: 1 ~$ tar xjvf linux-3.0.4.tar.bz2 2.配置内核 对内核进行配置是为了得到内核配置文件.config.通

LINUX PID 1和SYSTEMD PID 0 是内核的一部分,主要用于内进换页,内核初始化的最后一步就是启动 init 进程。这个进程是系统的第一个进程,PID 为 1,又叫超级进程

要说清 Systemd,得先从 Linux 操作系统的启动说起.Linux 操作系统的启动首先从 BIOS 开始,然后由 Boot Loader 载入内核,并初始化内核.内核初始化的最后一步就是启动 init 进程.这个进程是系统的第一个进程,PID 为 1,又叫超级进程,也叫根进程.它负责产生其他所有用户进程.所有的进程都会被挂在这个进程下,如果这个进程退出了,那么所有的进程都被 kill .如果一个子进程的父进程退了,那么这个子进程会被挂到 PID 1 下面.(注:PID 0 是内核的一部分

惊!用arm-linux-gcc.4.3.2交叉编译器编译linux-3.0.1内核

1.我这里的内核是forlinx 的FORLINX_linux-3.0.1.tar.gz内核,把这个文件准备好(拷贝到 linux os 的forlinx文件夹下面),这个文件不小117M,用xftp花费了我20秒时间. 2.然后解压缩 命令tar zxf FORLINX_linux-3.0.1.tar.gz, 这里我看出来了已经解压缩成功了 在编译内核之前,我先安装一个工具可能会用到,那就是libncurses5方便使用make menuconfig 命令,执行命令即可:apt-get ins

miniGUI 3.0.12在Ubuntu 12.04下的配置

从miniGUI官网http://www.minigui.org/en/download/下载如下文件: 工具及依赖库文件: qvfb2-2.0.tar.gz gvfb-1.0.0.tar.gz zlib-1.2.2.tar.gz libpng-1.2.37.tar.gz jpegsrc.v7.tar.gz freetype-2.3.9-fm20100818.tar.gz minigui文件 libminigui-gpl-3.0.12.tar.gz minigui-res-be-3.0.12.t

《linux 内核全然剖析》编译linux 0.12 内核 Ubuntu 64bits 环境

我×.. . 最终好了,大概3 4个小时吧...各种毛刺问题.终究还是闯过来了.. .. [email protected]:~/Downloads/linux-0.00-050613/linux-0.00$ make ld -s -x -M head.o  -o system > System.map dd bs=32 if=boot of=Image skip=1 16+0 records in 16+0 records out 512 bytes (512 B) copied, 0.000

《linux 内核全然剖析》 mktime.c

tm结构体的定义在time.h里面 struct tm { int tm_sec; int tm_min; int tm_hour; int tm_mday; int tm_mon; int tm_year; int tm_wday; int tm_yday; int tm_isdst; }; /* * linux/kernel/mktime.c * * (C) 1991 Linus Torvalds */ #include <time.h> /* * This isn't the libra

《linux 内核全然剖析》 sys.c 代码分析

sys.c 代码分析 setregid /* * This is done BSD-style, with no consideration of the saved gid, except * that if you set the effective gid, it sets the saved gid too. This * makes it possible for a setgid program to completely drop its privileges, * which i