我想要用不同的系统调用表构建自己的自定义内核(相同的系统调用但在不同的位置/编号)。我正在使用3.2.29版本的内核。
更改内核非常容易:
1)在arch/x86/kernel/syscall_table_32.S中更改系统调用的位置
2)在arch/x86/include/asm/unistd_32.h中更改系统调用宏的编号
3)编译和安装新内核
我调换了系统调用的顺序:
我认为,如果我使用修改后的内核头文件编译
我漏掉了什么吗?我需要做什么才能使系统运行?
我采取的步骤如下:
1)按照问题所述构建并安装内核
2)使用
3)使用参数
4)我使用一张Live CD以外部方式访问文件系统,以便安装新的
我希望新的
之后,在引导系统时,启动停留在(initrafms) shell屏幕上:我猜我需要重建
更改内核非常容易:
1)在arch/x86/kernel/syscall_table_32.S中更改系统调用的位置
2)在arch/x86/include/asm/unistd_32.h中更改系统调用宏的编号
3)编译和安装新内核
我调换了系统调用的顺序:
sys_open
代替了 sys_read
的位置和编号,反之亦然。我认为,如果我使用修改后的内核头文件编译
glibc
,我可以拥有一个运行中的系统,但不幸的是,这还不够,我的系统无法启动。我漏掉了什么吗?我需要做什么才能使系统运行?
我采取的步骤如下:
1)按照问题所述构建并安装内核
2)使用
make headers_install INSTALL_HDR_PATH=[path]
提取新的内核头文件3)使用参数
--with-headers=[path/include]
编译glibc4)我使用一张Live CD以外部方式访问文件系统,以便安装新的
glibc
,使用make install install_root=[原始文件系统]
(因此系统在安装期间不会中断)我希望新的
glibc
已经构建好了,但我不确定。之后,在引导系统时,启动停留在(initrafms) shell屏幕上:我猜我需要重建
initrd
,但是如何根据新的系统调用表进行编译呢?