|
re回复:
今天终于解决这个问题了
第一
赵炯先生的0.11连uname指令都没有写出来
先要自己补写这条指令,代码如下:
// uname.c - 适配Linux 0.11/0.12,支持 uname 与 uname -a
// 注意:0.11要先改内核sys.c里release字符串才会显示0.11,否则是0
#include <stdio.h>
#include <sys/utsname.h>
#include <string.h>
int main(int argc, char *argv[])
{
struct utsname u;
int show_all = 0;
// 简单解析参数,只识别 -a
if(argc > 1 && strcmp(argv[1], "-a") == 0){
show_all = 1;
}
if(uname(&u) == -1){
perror("uname");
return 1;
}
if(show_all){
// -a:全部输出(对应现代uname -a)
printf("%s %s %s %s %s\n",
u.sysname,
u.nodename,
u.release,
u.version,
u.machine);
}else{
// 不带参数只输出内核release(原版简易行为)
printf("%s\n", u.release);
}
return 0;
}
先gcc uname.c -o uname
然后 mv uname /bin/
第二,内核源码并没有写好
需要找到 /usr/src/linux/kernel
下的sys.c文件
找到
static struct utsname thisname = {
"linux", "nodename", "0", "0.11", "i386"
//这行具体文字会跟这里写的不太一样,关键要找到
//int sys_uname(struct utsname * name ){这个函数
};
改写成
static struct utsname thisname = {
"linux ", " ", "linux0.11", " ", " "
};
然后重新编译内核,再重新启动系统,注意一定要重启系统否则更新无法生效
编译内核指令
在/usr/src/linux输入
make clean
不先清除内核也无法重新编译,然后
make
最后
dd bs=8192 if=Image of=/dev/fd0
最后强调一次
编译执行完内核一定要重启整个系统
这样重启回来执行uname -a
就能看见对应版本信息
linux0.11
|