前提条件
一个安装好的linux系统
源码下载 kernel.org
安装好 gcc
安装好 make
//------------------
//
//注意编译前根据要编译的版本中的说明文件安装编译需要的支持软件
//
//-----------------------------
1:编译uboot
刷固件到开发版
指令加载启动linux内核文件
2:编译linux 最好在当前运行着那个内核的系统里编译那个版本的内核
2.1:清理编译痕迹
make clean 清理所有生成文件保留配置文件 .config 文件
make mrproper 清理掉所有生成文件和配置文件
make distclean 全部清理
2.5:生成配置文件方式有以下几种
make config 基于命令行交互方式
make menuconfig 基于文本模式的菜单配置 推荐使用 需要ncurse 库支持,apt install libncurses5-dev;还要注意命令行宽高必须19行到80行的高度
空格可以变换选项中的值
内容 输入方式 编译方式
* y 编译连接
m m 编译不链接
空 空格 不编译链接
使用空格可以切换这三种输入
make oldconfig 使用以后的.config,有新功能也需要重新配置
make xconfig 图形化配置
2.8:编译内核
make zImage 编译内核,限制于大小(512k)
make bzImage
加 V参数可以看到编译过程
如:make zImage V=1
编译过程出现不支持PIC时,打开跟路径下 Makefile 文件,查找KBUILD_CFLAGS 在这个参数最后添加-fno-pie再试
注意:有可能会报错GNU汇编器版本注意检查 编译汇编器的时候需要makeinfo的支持
编译过的镜像文件在arch/<平台CPU>/boot/
3:编译模块
在编译源码的时候进行了编译,注意编译源码时设置成可动态加载的模式,这样后期有模块添加方便
->make modules #编译模块
->make modules_install #安装模块,将编译好的源代码拷贝 到/lib/modules下 下面制作启动文件时需要用到拷贝的版本目录,有了这个目录才能制作启动文件
4:制作启动文件
mkinitrd initrd-$version $version
例:
mkinitrd initrd-4.1.16 4.1.16
注意:版本号不能随便改
安装编译后的内核与启动文件
5:拷贝镜像文件到boot目录
cp arc/<cpu>/boot/zImage /boot/vmlinux-$version
6:拷贝启动文件到boot目录
cp initrd-$version /boot
7:修改启/动配置文件 检测启动方式是用的UEFI(grub2-efi.cfg)还是用的BIOS(grub.conf 或者配置 grub2.conf文件)配置的时候注意所有文件已斜杠开头
可能是grub.conf文件
可能是lilo.conf文件
例如:
vim /etc/grub.conf
修改引导的时候根据自己使用的引导程序进行确定怎么修改