我想用不同的系统调用表构建我自己的自定义内核。(相同的系统调用,但位置/编号不同)
我正在研究内核 3.2.29。
更改内核非常简单:
1) 在arch/x86/kernel/syscall_table_32.S中改变系统调用位置</p>
2) 更改 arch/x86/include/asm/unistd_32.h 中的系统调用宏号
3)编译安装新内核
我切换了系统调用:sys_open
取代了 的位置和数量sys_read
,反之亦然。
我想如果我glibc
使用修改后的内核头文件进行编译,我可以拥有一个正在运行的系统,但不幸的是,这还不够,我的系统无法启动。
我错过了什么吗?为了拥有一个正在运行的系统,我还需要做什么?
我采取的步骤是:
1)如我的问题中所述构建和安装内核
2)使用提取新的内核头文件make headers_install INSTALL_HDR_PATH=[path]
3) 使用参数构建 glibc--with-headers=[path/include]
4)我使用live cd从外部访问文件系统以安装新的glibc
,使用make install install_root=[the original file system]
(因此系统在安装过程中不会中断)
我希望新glibc
的建造得当,但我不确定。
之后,在引导系统时,引导停止在 (initrafms) shell 屏幕中:我想我需要重新构建initrd
,但是如何根据新的 syscall 表编译它?