如何将init程序打包到内核中
将init程序打包到内核中让我们从一个简单的C语言init程序开始,该程序在内核控制台中打印经典的Hello World信息。
你好,C:
#包括
#包括
int main(int argc、argv {字符})
{
printf(Hello World,从initramfs。;
睡眠(9999999);
返回0;
}
休眠()函数语句不是内核的功能要求,它可以快速地从恐慌信息中提取信息以避免执行。
然后将hello编译成静态连接程序:
GCC啊hello_static静态-你好。C
命令行中的s参数表明编译的程序不包含调试位置信息。其目的是减少编译后的程序文件的大小。
然后创建一个initramfs的生成源文件目录,图像,并复制hello_static程序到目录,重命名为init。
在映像目录中,创建一个控制台设备文件,init程序不能输出内核控制台中的信息:
mknod - M 600开发 /主机C 51
请注意,此命令的执行需要root权限。
好了,现在你可以把内核配置参数和建立initramfs:
在一般的安装配置目录,输入图像的路径名的initramfs源配置项,例如,我的路径 / / /家威克initramfs测试/图像。
因为我们的init程序是ELF格式的,内核需要支持ELF的可执行文件,否则init程序的启动将失败。
在内核的可执行文件格式的配置目录,选择ELF二进制内核支持,使内核支持ELF格式的可执行files.his
可以根据实际需要设置内核配置参数。
在内核配置参数的设置,它是根据传统的内核编译方法编译和initramfs是自动连接到编译内核映像文件。