从内核开始,本以为这一章可以快速跳过,但还是发现了很多新的有趣的地方。获取源代码https://www.kernel.org压缩源代码或增量补丁bz2tarxvjflinux-x-y-z.tar.bz2gztarxvzflinux-x-y-x.tar.gzhttps://github.com/torvalds/l。..InstallSourcecode/usr/src/linux请勿使用此源码树进行开发,因为编译后的C库使用的内核版本链接至此树。正确:创建您自己的主目录,然后仅使用root进行安装。关于补丁:patch-p1<../patch-x.y.z内核源码树目录描述archspecificarchitecturesourceblockdeviceiolayercryptoconfidentialAPIDocumentskernelsourcedocumentationdriversdevicedriverfirmwaredevicefirmwarerequiredtousecertaindriversfsVFSandvariousfilesystemsincludekernelsamefileinitkernelbootingandinitializationipcinter-processcommunicationkernelcoresubsystemlibgeneralkernelfunctionmmmemorymanagementsubsystemandVMnetnetworksubsystemsamplesexamplescripts用于编译内核的脚本开发工具virt虚拟化系统编译编译Linux前需要配置:CONFIG_XXXX:yes|no|module;决定哪些文件可以编译进内核;module表示选择配置选项,但是在编译时,这部分功能的实现代码以模块的形式生成(动态安装的独立代码块)。通过预处理命令处理代码;配置选项可以是字符串和证书,以预处理宏的形式指定内核源代码可以访问的值;例如指定静态分配数组的大小。配置命令:通过makeconfig图形界面工具makemenuconfiggtk+图形工具makegconfig默认配置makedefconfig将配置选项放在根目录下。放在/proc/config.gz下,可以从/proc复制配置文件,用它来编译新的内核:zcat/proc/config.gz>.configmakeoldconfig配置完成后:make>/dev/nullimproveMake高效的多核,比如16核:make-j32>/dev/null;安装参考引导工具的说明,将内核镜像复制到/boot目录下,按照启动要求进行安装。内核模块的安装是自动的,makemodules_install,安装到/lib/modules下。编译的时候会在内核代码树的根目录下创建一个System.map文件,一个符号对照表,内核符号和它们的起始地址对应,需要将内存地址翻译成通俗易懂的函数名和变量名。内核开发编译内核时不能访问c库文件(libc)和标准c头文件lib/string.c=>
