logo 欢迎您,尊贵的过客
用户名 密码

linux内核

【返回论坛】
楼主     发布时间:2019-10-14 21:51:29   点击:1140次
作者:过客
积分:0
    如何知道赵烔博士的linux0.11是0.11


在研究linux0.11之前
有一个好像不是问题的问题出现了
linux0.11没错是可以运行了
GCC编译器实验证明是可以用了
但是
怎么知道运行着的系统是0.11呢?
说不定是0.12或者其他
如果用现在的发行版命令
uname -a
cat /proc/version
都没用
0.11根本不支持这些命令
包括其他网上可以找到的其他命令
都不支持
问题出现了
解决了的话在本贴后跟贴

回复这个贴子
引用
第1楼     发布时间:2019-10-14 21:51:42  
作者:过客
积分:0
    re回复:如何知道赵烔博士的linux0.11是0.11

不要小看任何一个简单的问题
如果能解决就是简单问题
解决不了就是大问题

回复这个贴子
引用
第2楼     发布时间:2019-10-14 21:51:57  
作者:过客
积分:0
    re回复:re回复:如何知道赵烔博士的linux0.11是0.11

想过一个办法
用help |more
查看全部命令
但是发现help里连gcc指令都没有
所以这个办法应该是行不通的

回复这个贴子
引用
第3楼     发布时间:2019-10-14 21:52:11  
作者:过客
积分:0
    re回复:re回复:re回复:如何知道赵烔博士的linux0.11是0.11

cd /tmp/
ls -l 
vi the first file listed by command "ls -l" under folder /tmp .
Then you can find the version of linux kernel source code.
The file is generated when compile the linux kernel. 
Some information shown as below:

diff -r linux/fs/Mkefile linux-0.11.org/fs/Makefile
diff -r linux/fs/exec.c inux-0.11.org/fs/exec.c
diff -r linux/init/main.c linuux-0.11.org/init/main.c
diff -r linux/kernel/system_call.s linux-0.11.org/kernel/system-call.s

回复这个贴子
引用
第4楼     发布时间:2019-10-14 21:52:11  
作者:过客
积分:0
    re回复:re回复:re回复:如何知道赵烔博士的linux0.11是0.11

cd /tmp/
ls -l 
vi the first file listed by command "ls -l" under folder /tmp .
Then you can find the version of linux kernel source code.
The file is generated when compile the linux kernel. 
Some information shown as below:

diff -r linux/fs/Mkefile linux-0.11.org/fs/Makefile
diff -r linux/fs/exec.c inux-0.11.org/fs/exec.c
diff -r linux/init/main.c linuux-0.11.org/init/main.c
diff -r linux/kernel/system_call.s linux-0.11.org/kernel/system-call.s

回复这个贴子
引用
第5楼     发布时间:2019-10-14 21:54:27  
作者:过客
积分:0
    re回复:re回复:re回复:re回复:如何知道赵烔博士的linux0.11是0.11


本回复由lcm解决

回复这个贴子
引用
第6楼     发布时间:2019-10-14 21:54:38  
作者:过客
积分:0
    re回复:re回复:re回复:re回复:re回复:如何知道赵烔博士的linux0.11是0.11

该办法中文解答:
查看tmp临时文件记录的编译过程
diff 比较两个文件
有不同的地方就重新编译
相同的就跳过

回复这个贴子
引用
第7楼     发布时间:2019-10-14 21:54:59  
作者:过客
积分:0
    re回复:re回复:re回复:re回复:re回复:re回复:如何知道赵烔博士的linux0.11是0.11


其实还是希望能给出一个命令就看到版本的指令

回复这个贴子
引用
第8楼     发布时间:2026-10-18 19:02:17  
作者:kjtoday
积分:268
    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

回复这个贴子
引用
第9楼     发布时间:2026-10-18 21:22:26  
作者:leon
积分:2549
    re回复:

static struct utsname thisname = {
    "linux ", " ", "linux0.11", " ", " "
};
这里建议改成
static struct utsname thisname = {
    "linux ", "kernel ", "0.11 ", " ", " "
};
更加好

回复这个贴子
引用

【返回论坛】


回复主题:
回复内容(可拖动回复框右下角调整大小):
文章内容支持少量UBB代码,请参看UBB使用说明。
用户名:
email:

 
 
Powered by kjtoday 20261024 | 友情链接:和讯   |  站长博客 |    站长留言板 |    管理员邮箱地址:3293815@qq.com   |   2019年11月5日正式运营