-
2021-05-13 00:47:31
linux内核编译步骤
对于linux新手来说,编译内核相对有一些难度,甚至不知道如何入手,我通过在网上收集这方面的资料,最终编译成功.现在我归纳了一下,写出这一篇还算比较详细的步骤,希望能对各位新手有一些
帮助。
1、 准备工作
(1)整理出系统需要支持的硬件、文件系统类型以及网络协议等内容。
(2)建议用命令uname –r 查看一下系统的版本号,如果你的系统版本与将要编译的内核版本一致,建议将/lib/modules下的内容备份,否则将来的make modules_install 步骤产生的文件会覆盖这个路径下的内容。
(3) A:下载并解压linux内核,建议从http://www.kernel.org/pub/linux/kernel/ 下载内核,因为安装系统时所安装的源代码默认情况下支持很多设备,这样给内核裁减增加了难度。以下假设你已经下载了内核的为linux-x-y-z.tar.gz。一般都将linux内核源代码放在/usr/src下,这里仍然遵守这个习惯,如果你的这个路径下已经存在这个版本的内核,建议将已有的改个名称。
B:如果内核已经安装(/usr/src/目录有linux子目录),跳过。如果没有安装,在光驱中放入linux安装光盘,找到kernel-source-2.xx.xx.rpm文件(xx代表数字,表示内核的版本号), 比如RedHat linux的RPMS目录是/RedHat/RPMS/目录,然后使用命令rpm -ivh kernel-source-2.xx.xx.rpm安装内核
2、清除从前编译内核时残留的.o 文件和不必要的关联
cd /usr/src/linux
make mrproper
确保源代码目录下没有不正确的.o文件和文件依赖关系,执行该命令后,内核选项会回到默认的状态下。如果你是下载的内核源码,而且是第一次编译,就没有必要执行这一步操作
3、配置内核,修改相关参数,请参考其他资料
在图形界面下,make xconfig;字符界面下,make menuconfig
在内核配置菜单中正确设置个内核选项,保存退出
4、正确设置关联文件
make dep
根据上一步所选择的选项,建立文件的依赖关系。
5、make clean
清理一些不必要的文件,如果你在上次编译的基础上,删去了一些选项,建议你执行这一步操作,否则,就没有必要了。
6、编译内核
对于大内核(比如需要SCSI支持),make bzImage
对于小内核,make zImage
7、编译模块
make modules
编译可加载模块(即内核选项中选择为M的选项),编译时间跟M选项的数量有关。
8、安装模块
make modules_install
即将编译好的modules拷贝到/lib/modules下,这就是为什么在“准备工作”的第三步提醒你备份的原因了。
9、使用新内核
方法一:
(1)更换内核:A、mv /usr/src/linuxX.X.X/system.map /boot/system.map
B、mv /usr/src/linuxX.X.X/arch/i386/boot/bzImage /boot/vmlinuz
(2)然后修改/etc/lilo.conf文件,加一个启动选项,使用新内核bzImage/zImage启动。格式如下:
boot=/dev/hda
map=/boot/map
install=/boot/boot.b
prompt
timeout=50
linear
default=linux-new ### 告诉lilo缺省使用新内核启动linux ###
append="mem=256M"
p_w_picpath=/boot/vmlinuz-2.2.14-5.0
label=linux
read-only
root=/dev/hda5
p_w_picpath=/boot/bzImage(zImage)
label=linux-new
read-only
root=/dev/hda5
保留旧有的启动选项可以保证新内核不能引导的情况,还可以进入linux进行其他操作。
保存退出后,不要忘记了最重要的一步,运行/sbin/lilo,使修改生效
方法二:使用GRUB(修改grub.conf文件)
(1)更换内核:A、mv /usr/src/linuxX.X.X/system.map /boot/system.map
B、mv /usr/src/linuxX.X.X/arch/i386/boot/bzImage /boot/vmlinuz
(2)修改引导管理程序Grub,/etc/grub.conf
内容如下:
#boot =/dev/had
default =0
timeout =10
splashp_w_picpath =(hd0, 0)/grub/splash.xpm.gz
title Red Hat Linux(2.4.20-8)
root(hd0, 0)
kernel /vmlinuz -2.4.20-8 ro root =LABEL =/
initrd /initrd-2.4.20-8.img
方法三:修改启动配置文件
现在大多数使用的都是grub启动,需要修改/boot/grub/grub.conf,添加相应的启动信息,添加内容的最简单格式如下:
title 显示在启动菜单上的名称
root 根文件系统挂载分区
kernel 压缩过的内核文件名
initrd 根文件系统文件名
如:
title My new kernel
root (hd0,2)
kernel /boot/vmlinuz-x.y.z
initrd /boot/initrd-x.y.z.img
10、重新生成ram磁盘
如果您的系统中的/etc/lilo.conf没有使用了ram磁盘选项initrd,略过
如果您的系统中的/etc/lilo.conf使用了ram磁盘选项initrd,
使用mkinitrd initrd-内核版本号 内核版本号命令重新生成ram磁盘文件,例如我的Redhat 6.2:
mkinitrd initrd-2.2.14-5.0 2.2.14-5.0
之后把/etc/lilo.conf中的initrd指向新生成的initrd-2.2.14-5.0文件:
initrd=/boot/initrd-2.2.14-5.0
ram磁盘能使系统性能尽可能的优化,具体参考/usr/src/linux/Documents/initrd.txt文件
11、重新启动,OK!
更多相关内容 -
小米mix3内核编译过程.docx
2021-05-29 21:43:16小米mix3内核的编译过程心得 -
pve7.0 5.11.22-4 iommu分组 pve内核编译
2021-07-30 16:12:32解压得到4个deb文件一同传到pve的root目录下 然后运行如下代码 -
内核编译提示内存不足解决办法.docx
2020-12-24 19:23:11内核编译提示内存不足解决办法 -
Linux内核编译.config文件,内核很小
2019-03-05 16:28:08linux内核编译.config文件,编译出的内核很小,用于内核调试,内核版本4.19.23 -
老驱动模块在高版本内核编译下错误解决
2020-07-29 06:40:01文章整理了老驱动模块在高版本内核编译下的两个错误并给出解决办法。 -
Debian Linux系统下的内核编译详细讲解
2020-03-04 12:44:26本文详细介绍了Debian Linux系统下的内核编译方法。 -
VMware环境下Linux内核编译过程详细解析
2020-03-04 12:43:09本文详细介绍了VMware环境下Linux内核编译过程。 -
linux-内核编译各个选项的含义
2017-11-09 13:10:54linux-内核编译各个选项的含义,详细说明了linux Kernel菜单中的各种配置含义 -
ARM-Linux内核编译流程
2016-10-16 14:56:47适合arm-linux的内核编译, 包含u-boot,kernel,rootfs -
内核编译安装与调试相关问题与解决方法(1)
2019-03-07 23:17:48linux内核分析与驱动编程,内核编译安装与调试相关问题与解决方法 -
Linux内核编译配置选项详解
2014-10-10 16:16:45Linux内核编译配置选项详解,可以帮助您了解内核配置。 -
linux11-日志管理,内核编译
2020-08-10 10:18:08绍linux11-日志管理,内核编译 -
RedHat linux 8.0下内核编译步骤和说明
2020-09-16 02:17:49RedHat linux 8.0下内核编译步骤和说明 -
内核编译与模块开发基本流程
2018-01-09 16:10:04一个Linux内核,可用于内核编译,适用于VM,没有基本流程 -
Zynq 7000 Linux内核编译方法
2018-08-26 19:56:03Zynq 7000 Linux内核编译方法,很实用的教程,适合快速上手 -
内核编译过程
2015-10-08 20:04:52以配置2440开发板所使用内核为例,原始内核版本为linux-2.6.32.67讲解如何快速配置编译内核,适合初学者 -
Ubuntu16.04LTS环境下Linux-4.0.1内核编译(内核文件+指导书)
2018-05-19 19:44:02Ubuntu16.04LTS环境下Linux-4.0.1内核编译(内核文件+指导书) -
嵌入式linux内核编译配置命令
2020-07-20 01:44:41本文主要介绍了一下关于嵌入式linux内核编译配置命令,下面一起来学习一下 -
Linux内核编译与裁剪
2017-04-05 10:20:13Linux内核编译 裁剪 -
Linux树莓派开发——配置树莓派内核源码,内核编译,更换树莓派Linux内核
2022-03-13 11:12:09树莓派Linux内核源码的下载,编译,以及更换Linux树莓派的内核方法目录
一、树莓派Linux源码配置
驱动代码的编译需要一个提前编译好的内核,所以就需要进行内核的编译,编译内核就必须完成相关的配置,配置的最终目的是会生成 .config文件,该文件是指导Makefile去把有用东西组织成内核。
1、配置的三种方法
第一种:通常买了开发板厂家会配linux内核的源码,使用厂家的.config文件进行配置
查找厂家 .config 指令
find . -name *_defconfig
树莓派1的工程是bcmrpi_defconfig,2、3的工程是bcm2709_defconfig。
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig 指定ARM架构 指定编译器 树莓派 主要核心指令
此命令功能是获取bcm2709_defconfig的配置到 .config里。
第二种方式:make menuconfig 一项项的进行配置,通常是基于厂家的config来配置。
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig
第三种方式:全靠自己来实现。
2、内核源码的下载
下载地址:https://github.com/raspberrypi/
下载好后传送到Ubuntu 即可。
二、树莓派内核编译
对树莓派内核源码进行配置后,下一步要进行树莓派Linux内核的编译,需要树莓派交叉编译工具、树莓派内核。
交叉编译的下载和使用可以点交叉编译
需要用到的库
sudo apt-get install bc sudo apt-get install libncurses5-dev libncursesw5-dev sudo apt-get install zlib1g:i386 sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5
1、树莓派的编译
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs j4指定用多少电脑资源进行编译 (j4表示4核)zImage表示生成内核镜像 modules要生成驱动模块 dtbs生成配置文件
2、生成vmlinux
编译成功后,可以看到源码树目录多了vmlinux这个文件,如果编译失败则没有此文件,成功后,目标zImage镜像在arch/arm/boot目录下(此步ARM架构的芯片都是类似)(vmlinux是未压缩的liunx,zImage是压缩好的liunx)。
三、更换树莓派内核的详细步骤
1、将生成的zImage打包成树莓派可用的xxx.img
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
2、插入装有树莓派系统的内存卡读卡器
连接到虚拟机就可以了。
使用
dmesg
指令查看读卡器映射,出现sdb1、sdb2则为连接成功,如果只有一个sdb1,则需要重新往SD刷入系统(有可能是sdc1、sdc2或者sdd1、sdd2)。3、在根目录新建两个文件夹data1和data2
mkdir data1 data2
4、挂载U盘
sudo mount /dev/sdd1 data1 sudo mount /dev/sdd2 data2
data1是fat分区,是boot相关的内容,kernel的img,data2是ext4分区,也就是系统的根目录分区。
5、安装modules, 用于安装设备驱动文件
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=[ext4] modules_install 注意ext4是一个路径 :/home/lwl/data2 或者:sudo env PATH=$PATH make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/media/linux/rootfs modules_install /media/linux/rootfs:TF卡设备会自动挂载到/media/${当前用户目录}/下的boot和rootfs目录下,也可以换成/home/lwl/data2
6、更新 kernel.img 文件
前面已经用 mkknlimg 工具打包了kernel_new.img文件了,只要把它复制到boot分区(data1)并配置使用即可
ls /home/lwl/data1 //查看原文件
将文件备份,防止失败
cp kernel7.img kernel7OLD.img
7、把打包了kernel_new.img文件拷贝到data1,起名kernel7.img,直接替换为原来的kernel7.img
cp kernel_new.img /home/lwl/data1/kernel7.img
注意:拷贝完成后需要查看 md5的值,如果两文件的md5值不一样则需要重行拷贝,仿真文件却少。
md5sum kernel7.img 查看md5值
8、拷贝其他配置文件
cp arch/arm/boot/dts/.*dtb* /home/lwl/data1 cp arch/arm/boot/dts/overlays/.*dtb* /home/lwl/data1/overlays/ cp arch/arm/boot/dts/overlays/README /home/lwl/data1/overlays/
9、断开读卡器连接,取下SD卡,插上树莓派
先看一下我树莓派以前的内核版本
再来看一下更换后的内核版本
可以看到已经成功更换了树莓派的内核。
-
Linux310内核编译选项_linux内核编译的基本流程
2020-08-14 16:16:47x86_64(AMD64)平台的内核编译,所以这个是必选项64编译位内核.本文仅讲述General setup 常规设置 Cross-compiler tool prefix CONFIG_CROSS_COMPILE .进行编译相当于使用make 剃协当佃偍?牡?楬畮?交叉编译工具前缀 -
Linux内核编译与升级
2022-04-03 17:02:20linux 内核编译与升级介绍
对于学习linux内核的入门,首先要的是如何编译内核并且将内核替换成自己编译的,进行调试打印等操作。下面主要介绍linux内核的编译全过程。
下载 www.kernel.org 对应的内核版本;用的是Ubuntu LTS 16.04,虚拟机采用VMWare workstation 11。
查看内核版本 uname -a编译流程
第一步: 下载的内核源码: linux-4.9.309.tar.xz
第二步:解压安装包
xz -d linux-4.9.309.tar.xz 得到tar包
tar -xvf linux-4.9.309.tar得到目录
第三步:安装需要的软件包
apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison第四步:配置内核代码
a:进入源代码目录 cd linux-4.9.309目录
b: 从当前机器启动目录拷贝配置信息到源代码目录。这边操作与当前环境一致的配置:
cp -v /boot/config-$(uname -r) .config
3 命令启动配置界面
make menuconfig
可以配置相关的模块参数,如果对于不熟悉的情况,可以直接采用默认的形式4 编译内核
make -j 4
编译采用多核 4就是4核
5 安装模块
make modules_install 安装对应的模块6 安装内核
make install 安装的最新版本直接替换7 重启,验证版本
uname -mrs总结
编译的过程中出现了安装编译成功,出现只要一重启就无法打开最新的版本内核出现加载login service。可能是由于vmware workstation 版本过低,虚拟化不支持新的内核版本
-
OpenEuler内核编译及替换
2021-07-09 13:04:12二、内核编译 1.解压缩 将下载好的源码进行解压 tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz 2.清理源代码树 解压后得到一个名为kernel的内核源码文件夹,进入后执行命令 make mrproper 清理过去内核编译...一、内核源码下载
在gitee上下载OpenEuler内核源码 下载地址
选择需要的内核版本源码压缩包进行下载
二、内核编译及安装
1.解压缩
将下载好的源码进行解压
tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz
解压后得到一个名为kernel的内核源码文件夹,可以将文件夹名修改为内核版本的名称然后将它移动到内核源码目录下方便统一管理各版本的源码,比如我的内核源码目录是/usr/src/kernels
mv kernel 4.19.90 mv 4.19.90/ /usr/src/kernels/
2.清理源代码树
进入解压好的源码文件夹执行命令,清理过去内核编译产生的文件,第一次编译时可不执行此命令
make mrproper
3.生成内核配置文件.config
可以先将将系统原配置文件拷贝过来,原配置文件在/boot目录下,输入config-后tab一下就出来了
cp -v /boot/config-$(uname -r) .config
执行依赖安装
yum install ncurses-devel
然后使用make menuconfig 对配置进行需要的更改,决定将内核的各个功能系统编译进内核还是编译为模块还是不编译
make menuconfig
命令执行后会进入基于文本选单的配置界面
先Load载入原始.config配置(当然也可以自行配置或者默认配置)
这里的配置可参考 Make Menuconfig详解 (配置内核选择)
我没有改动直接默认配置,然后选择Save,生成了一个.config文件。4.内核编译及安装
执行编译前先安装所需组件
yum install elfutils-libelf-devel
yum install openssl-devel
yum install bc然后执行make开始编译,编译大概要两三个小时,这个过程需要保证连接的稳定,中断了就要重新编译了
make
我编译时最后打印的一些日志,可以参照一下
编译完成后安装模块,耗时1分钟
make modules_install
然后安装内核。如果在这个过程中报错缺少某个模块的话,一般原因都是前面make编译的过程中提前中断了,少年从头来过吧!
make install
安装完成后就可以在/boot目录下看到新安装的内核啦
5.更新引导
下面的命令会根据 /boot/ 目录下的内核文件自动更新启动引导文件。
grub2-mkconfig -o /boot/grub2/grub.cfg
然后重启系统就可以看到多个内核,其中一个就是我们新安装的内核,可自由选择一个内核启动系统。
6.修改默认启动内核
但是此时系统默认启动的内核还是原来的旧内核,我们可以修改默认启动内核。
(1) 查看当前系统所有可用内核
cat /boot/grub2/grub.cfg |grep "menuentry "
(2) 查看当前默认启动内核grub2-editenv list
(3) 修改默认启动内核,grub2-set-default后的参数即要默认启动的版本,就是之前查看当前系统所有可用内核结果里面系统名称后的括号里的内容。grub2-set-default 4.19.90
再用grub2-editenv list命令可以看到已经修改成功,再重启系统默认启动的就是新内核了。
7.删除无用的内核
此时系统中可能已经有了很多个内核,如果想要删除无用的内核,可通过如下操作
(1) 删除通过源码手动安装的内核
1.以删除4.19.90.old这个内核为例,首先打开/boot目录用ll命令查看
然后删除/boot目录下4.19.90.old内核启动时相关文件rm -rf System.map-4.19.90.old vmlinuz-4.19.90.old
2.更新引导文件
使用如下命令自动更新
grub2-mkconfig -o /boot/grub2/grub.cfg
再用 cat /boot/grub2/grub.cfg |grep "menuentry " 命令查看就可以看到相比之前已经删除了4.19.90.old的引导
3. 删除掉/lib/modules/目录下的内核库文件4.19.90.old
至于/usr/src/kernels/目录下的内核源代码删不删就看个人选择了(2) 如果是删除用yum管理的内核可用如下方法(不建议这样操作!会删除一些必要的依赖软件)
查看yum管理的内核
rpm -qa |grep kernel
可以看到我们之前手动安装的内核并不在这里面
移除指定的内核4.19.90-2012.4.0.0053.oe1.aarch64,使用通配符*将内核及其相关文件全部删除yum remove kernel*4.19.90-2012.4.0.0053.oe1.aarch64
更新引导文件
grub2-mkconfig -o /boot/grub2/grub.cfg
-
Linux 发行版CentOS 7 编译内核
2021-01-09 09:00:42操作系统作业:编译Linux内核一、实验目的二、环境准备三、操作方法和步骤(1)下载内核并解压(2)配置项(3)编译内核(4)安装(5)重启虚拟机四、总结 一、实验目的 学习怎样重新编译Linux内核。 理解、掌握... -
Jetson Xavier NX 内核编译、源码编译
2022-04-14 11:21:07$ tar -xvjf public_sources.tbz2 $ cd Linux_for_Tegra/source/public $ tar -xvjf kernel_src.tbz2 2)、编译内核 备注:在此之前已经安装编译依赖工具 sudo apt install build-essential bc $cd /Linux_for_... -
编译Linux操作系统内核的步骤
2020-03-04 12:45:56其实,通常其它操作系统的内核编译是比较繁琐的。然而,由于Debian强大的dpkg软件包管理系统,使得内核的升级、编译也变得容易很多。如果下面的步骤都注意并执行了,编译内核不是很复杂的事情,我在基于debian的... -
Linux内核编译
2018-09-03 15:38:41下面简单介绍一下Linux内核编译过程。(附注:本博客所讲的内容是在Ubuntu上进行操作的,Cent OS并未验证) 1、下载内核源码,可以到kernel.org上进行下载。 2、解压内核源文件(注意:要先使用cd命令进入压缩包... -
[NVIDIA]-2 从零入手 Jetson Xavier NX 内核编译、源码编译流程
2020-05-07 20:00:13[NVIDIA] 入手 Jetson Xavier NX 内核剪裁及重新编译 本文主要讲述,基于 Jetson Xavier NX 开发者套件: 环境配置——>内核剪裁——>重新编译——>烧录流程。 What is Jetson Xavier NX : NVIDIA® ... -
内核编译详解
2014-03-19 14:45:00linuxkernel3.8内核编译详解,完美配置内核的方法。