如何将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是自动连接到编译内核映像文件。