精华内容
下载资源
问答
  • 编译内核

    千次阅读 2016-12-29 21:12:19
    本篇博客讲了怎么样成功编译内核,编译的内核不一定能用.不讲怎么修改内核 1/安装交叉编译器及编译内核所需工具 交叉编译工具链环境的搭建__1 安装工具 sudo apt-get install libncurses5-dev sudo apt-get ...
    
    本篇博客讲了怎么样成功编译内核,编译的内核不一定能用.不讲怎么修改内核
    
    

    1/安装交叉编译器及编译内核所需工具

    sudo apt-get install libncurses5-dev
    sudo apt-get install u-boot-tools
    

    2/获取内核源码

    源码位置

    具体选择哪个源码,选择稳定版本的吧.
    

    3/清理内核目录

    如果不是第一次编译内核文件,首先要

    make mrproper
    

    2/配置 ARCH 与 CROSS_COMPILE

    export ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
    
    可以通过修改Makefile 来表面避免在shell 下输入这条命令,不过一般不建议修改Makefile
    

    3/make xxx_defconfig

    • arm芯片对应的配置文件在arch/arm/configs/目录下

    • 根据你芯片的型号选择一个配置文件,就是和你芯片名称最相似的文件,并拷贝到顶层目录为.config

    • 这个是粗略的确定下编译内核前的配置

    
    会在顶层目录 生成 一个 .config 文件,这个就是配置的主要结果.
    
    这些 arch/arm/configs/ 下的 xxx_defconfig 对应的是一个开发板,可以说是一个母版.
      
    怎么确定找哪个 xxx_defconfig,
    
    硬件说板子是抄的 A板子,A板子抄的是 B 板子,刚好,B板子在内核中对应一个 xxx_defconfig
    那么 你就用 B板子对应的 xxx_defconfig,即 make xxx_defconfig
    
    例如
        make vexpress_ca9x4_defconfig
    
    
    

    4/make menuconfig

    • 这个是细致的确定下编译内核前的配置,如果不想细致,可以不做
    这个操作会改变 顶层目录 下 的 .config
    最终生成的.config 应该匹配你的板子
    
    操作效果
    读入当前目录下的.config
    会生成一个界面,让你选择一些东西,去选择一些东西.
    当退出的时候,保存,就会写入.config
      
    这个过程是最复杂的,你的99.9%的时间都应该花在这上面,这里面涉及一些改源码(主要是驱动源码)之类的.
    
    

    5/make uImage

    make  uImage//现在 arm 的板子也可以用 Image 了,具体待研究.
    该步骤会在arch/arm/boot/文件夹下生成一个uImage文件,该文件就是内核镜像
    
    //如果有编译机器是8核的话,可以用 make uImage -j8
    
    

    编译常见问题

    uImage和zImage

    uIamge是由zImage 经工具mkimage制作而来的,制作的过程就是压缩

    uboot目前只能支持uImage启动,不支持zImage启动

    bootm加载linux镜像,加载的是uIamge,bootm需要先对uIamge解压,解压地址为内核入口地址。当解压完成时uIamge和zIamge几乎是相同的,差别是uImage比zImage多64字节

    //多出的64字节
    2705 1956 fad0 6c19 58d0 99f5 0030 c588
    8000 8000 8000 8000 c959 2892 0502 0200
    4c69 6e75 782d 332e 302e 3800 0000 0000
    0000 0000 0000 0000 0000 0000 0000 0000
    

    预编译内核文件

    arch/arm/common/timer-sp.c 预编译 成 arch/arm/common/timer-sp.i
    
    查找 arch/arm/common/.timer-sp.o.cmd 第一行
    
    cmd_arch/arm/common/timer-sp.o := ../../arm-linux-gnueabi/arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc ...... -c -o arch/arm/common/timer-sp.o arch/arm/common/timer-sp.c
    
    做一个命令
    cmd_arch/arm/common/timer-sp.o := ../../arm-linux-gnueabi/arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc ...... -E -o arch/arm/common/timer-sp.i arch/arm/common/timer-sp.c
    
    
    ../../arm-linux-gnueabi/arm-linux-gnueabi/bin/arm-linux-gnueabi-gcc ...... -E -o arch/arm/common/timer-sp.i arch/arm/common/timer-sp.c 就是我们需要的命令, 然后 在 linux 根目录执行,得到 arch/arm/common/timer-sp.i 
    
    
    
    展开全文
  • 编译内核模块及交叉编译内核模块

    千次阅读 2020-01-19 12:02:36
    编译内核模块,可以用两种方法. 1. 常规方法,通过make menuconfig 去设置对应的项,将功能编进内核或编成module. 2. 利用内核环境直接从模块源代码编出module 第一种方法菜单操作,不易出错. 第二种方法更简单,实质....

    理解了它就简单了,所以关键是理解.

    编译内核模块,可以用两种方法.
    1. 常规方法,通过make menuconfig 去设置对应的项,将功能编进内核或编成module.
    2. 利用内核环境直接从模块源代码编出module
    第一种方法菜单操作,不易出错.
    第二种方法更简单,实质.可以理解模块的生成过程

    下面以usb转串行口驱动的生成为例来说明.
    将pl2303.c pl2303.h 源码copy到一个目录下,编写如下Makefile.
    如果是本地编译更简单,如果是交叉编译则需要进交叉内核路径和传人交叉参数即可.
    具体看注释就不解释了.

    $(warning KERNELRELEASE = $(KERNELRELEASE))
    ifneq ($(KERNELRELEASE),)
        obj-m := pl2303.o
    else
        PWD=$(shell pwd)
        KVER=$(shell uname -r)

    #编译x86_64模块时, 指定内核代码所在路径
    #KDIR=/lib/modules/$(KVER)/build
    #编译Arm 时,指定内核代码所在路径, 这个路径下,有编译内核的Makefile存在
    KDIR=/home/hjj/M6G2C/04.源码示例/3.软件源码/linux-src


    all:
        #编译x86_64, 简单的进入内核代码路径即可
        #make -C $(KDIR) M=$(PWD)
        #交叉编译arm, 我的环境需要指明ARCH, CROSS_COMPILE 变量
        make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
    clean:
        rm *.o *.ko modules.* Module.symvers *.mod.c
    endif


    其它的模块生成也可以如此操作.
    可见模块的编译是两次读取Makefile, 是用内核环境而不是普通环境编译的.

     

    展开全文
  • Ubuntu下编译内核

    千次阅读 多人点赞 2019-03-27 21:43:50
    最详细编译内核2019年3月27日编译内核1.先去官网下载内核源码2.保存一下文件3.安装一下编译内核需要的一些程序4.解压内核到指定位置5.进入到解压位置6.净化源码7.对内核选项进行配置8.删除配置时留下的一些不用的...

    2019年3月27日

    我在上一篇文章中提到要写一篇编译内核的详细教程,下面这个应该可以说是特别详细了。

    编译内核

    1.先去官网下载内核源码

    Linux官方内核网址
    尽量选一个比自己内核版本高的内核去下载,尽量下载稳定版,稳定版不用打补丁,下好编译完成就能用。对于不知道自己内核版本号的童鞋,可以在Ubuntu下打开终端输入uname -r

    2.保存一下文件

    最好是保存一下boot/grub/grub.cfg 这个文件他负责启动你的Ubuntu系统,你编译好内核之后是要把新内核信息加入到这个文件里面,这样你才能在启动Ubuntu的时候运用你的新内核。这个文件也是极其重要的。如果你在编译内核过程中操作不当,将里面的信息破坏了,那么你的系统将无法启动,这样你只能通过恢复这个文件来解决。

    3.安装一下编译内核需要的一些程序

    建议安装之前先更新一下软件来源,不然可能会出现安装失败的情况
    更新操作:sudo apt-get update

             sudo apt-get upgrade
             
    

    然后就是下载安装一系列的软件,为编译内核做准备

     sudo apt-get install libncurses5-dev   openssl libssl- dev 
     sudo apt-get install build-essential openssl
     sudo apt-get install pkg-config
     sudo apt-get install libc6-dev
     sudo apt-get install bison
     sudo apt-get install flex
     sudo apt-get install libelf-dev
     sudo apt-get install zlibc minizip
     sudo apt-get install libidn11-dev libidn11
    
    

    4.解压内核到指定位置

    	tar -xavf  linux-5.0.3.tar.xz  -C /usr/src 
    

    其中内核版本为你自己下载的 准备编译的版本 后面的都是这样(我的是5.0.3 你的以你自己下载的为准)。记住去你下载内核的目录下去解压,不然会找不到文件。

    5.进入到解压位置

    cd  /usr/src/linux-5.0.3
    

    后面的操作都是在这个目录下执行,如果不是必须我会说的。

    6.净化源码

    make mrproper
    

    得到源代码后,将其净化。

    7.对内核选项进行配置

    得到内核之后你肯定要对其进行配置,不然最后和你的电脑不适配,也是有问题的。我进行配置的办法是将现有内核的配置选项复制到你要编译的新内核上去。首先,我们要把原来内核的选项配置复制出来cp /boot/config- 4.15-23-generic ./.config 这句话的意思是将我现有的内核(4.15-23)版本的config配置信息复制到现在目录下的 .config里面 最后通过make menuconfig 对内核选项进行配置。 这个就是根据上面那个.config来配置的。这个是一个图形化配置 选择 load→OK→Save→OK→EXIT→EXIT就OK了 ! 注意看load后默认.config。

    8.删除配置时留下的一些不用的文件

    make clean  
    
    

    第一次编译不需要使用,主要是多次编译时使用。清除上一次配置留下来的不用文件。

    9.编译内核

    make bzImage -jn
    

    现在开始编译内核,时间会比较长,建议在电量充足的条件下进行。后面那个n是可以选择的进程数。意思就是多个线程一起编译。速度会较快一点。具体本机的线程数可以在设置里面查看详细信息。

    10.编译模块

    这也是编译内核里面重要且耗时较长的一步具体同上一步。

     make modules -jn
    

    11.安装模块

    make modules_install
    

    执行本操作 此时/lib/modules/下应该新生成一个新内核版本号的文件.
    此时在新内核目录下的操作都已经做完了。编译安装都已经完成,只剩最后的收尾工作。将新内核添加到启动项里面。

    12.将3个文件拷贝到boot目录下

    mkinitramfs /lib/modules/5.0.3 -o /boot/initrd.img-5.0.3-generic
    cp /usr/src/linux-5.0.3/arch/x86/boot/bzImage    /boot/vmlinuz- 5.0.3-generic
    cp  /usr/src/linux-5.0.3/System.map    /boot/System.map-5.0.3  
    

    如果不能执行 是缺少root权限的原因。在代码前面加上sudo。因为我下载的内核是5.0.3版本。具体你自己的版本是多少,你自己的命令就是多少,不要和我一样。

    嗯~~命令敲到这儿…
    你离成功只差0.0001了。最后更新一下grub。再查看一下grub.cfg里面有没有多出新内核的信息就可以了。

    13.最后一步,更新grub

    首先进入/boot/grub/ 然后执行update-grub2 这时候你查看一下当前目录下的grub.cfg文件内容。如果发现里面多了新内核的信息。那么恭喜你! 可以重启进入新内核了。

    en~~最后重启进入系统的时候记得点一下高级选项,查看一下内核启动顺序。(因为你现在拥有不止一个内核了),可以自己选择内核进行启动。

    14.小结

    当你进入你的新内核的时候可能发现没有什么变化,这是肯定的。因为只是内核启动变了。输入uname -r查看一下现内核的版本号就OK了!

    我自己呢,是编了2次内核才成功的。第一次是彻底将我的原内核和现内核的配置都搞坏了。那样我彻底进不去系统。根本无法修复。只能重装系统。第二次才成功。花了我2个下午的时间(编译内核是非常耗费时间的一个事情,建议如果没有什么必要的话就不要去弄他)。

    来自木又的第二篇博客!

    展开全文
  • 编译内核笔记

    千次阅读 2018-09-24 20:09:18
    编译内核大致步骤: ……………………下载官方内核源码并解压 ……………………编译内核 ……………………安装内核 ====我是下在https://www.kernel.org/里面下的最新的内核,现在是4.18.8版本下载之后,格式...

    编译内核大致步骤:
    ……………………下载官方内核源码并解压
    ……………………编译内核
    ……………………安装内核


    ====我是下在https://www.kernel.org/里面下的最新的内核,现在是4.18.8版本下载之后,格式为 .tar.zx ,下载完了之后,先切换到root用户,这里解压的技巧:后缀为zx 那就 zx -d 解压的文件名 )然后解压出来的就是.tar了,再用tar去解压,加上参数v可以查看解压的过程。
    这里我是解压到这里的。解压出来的文件如下:
    在这里插入图片描述
    ………………………………………………………………………………………………………………
    开始之前,需要运行这些命令,目的是为编译内核安装必要的环境:

    apt-get install libncurses* 安装一些库,*表示安装这类的所有库
    apt-get install build-essential openssl 
    apt-get install zlibc minizip 
    apt-get install libidn11-dev libidn11
    要是这些库没有安装正确的话,在使用make menuconfig的时候,就会出现很多错误
    比如说xxx.h找不到,出现no such file or dictionary
    

    库这些安装完毕后,就可以做以下操作了
    这里都没有加sudo,是因为前面已经切换为root用户了

    cd /xxxx/linux-4.18.8	//切换到你解压源码的文件夹
    make mrproper 		//清除编译过程中产生的所有中间文件
    make clean 	 	//清除上一次产生的编译中间文件
    make menuconfig	//图形化界面,方便选择一些功能
    

    最后一个命令执行后,若是弹出了这个界面如下图:那就说明你已经成功了一小部分了,反正我当时为了搞这个图形出来,是捣鼓了很久,因为一些库没有安装成功,很痛苦(手动狗头)
    在这里插入图片描述

    ………………………………………………………………………………………………………………
    ====配置内核之后,使用make进行编译

    ====此make过程中的一些问题:

    root@ubuntu:/home/xiao-ma/soft_install/linux-4.18.8# make
    scripts/kconfig/conf  --syncconfig Kconfig
    Makefile:940: *** "Cannot generate ORC metadata for CONFIG_UNWINDER_ORC=y, please install libelf-dev, libelf-devel or elfutils-libelf-devel".  Stop.
    root@ubuntu:/home/xiao-ma/soft_install/linux-4.18.8# apt-get install libelf-dev
    这里有提示,差什么安装什么就可以了
    
    
    scripts/sign-file.c:25:30: fatal error: openssl/opensslv.h: No such file or directory
    compilation terminated.
    scripts/Makefile.host:90: recipe for target 'scripts/sign-file' failed
    make[1]: *** [scripts/sign-file] Error 1
    Makefile:1049: recipe for target 'scripts' failed
    make: *** [scripts] Error 2
    root@ubuntu:/home/xiao-ma/soft_install/linux-4.18.8#  apt-get install libssl-dev
    这里这个错误需要安装这个库,所以呀,这个库要是没有安装稳妥的话,在编译内核的时候回遇到很多问题,当然了,多百度百度,有些还是很好解决的。
    

    编译的过程会很漫长,2-3小时,看网上有的使用命令:

    make –jN		//这里的N代表你cpu核心的2倍,如果你是四核,那N就等于8
    

    这样,编译的速度会快很多,编译过程图如下,会产生很多.o文件,这也就是我们为什么要使用这个命令的原因了
    make mrproper //清除编译过程中产生的所有中间文件

    ====假如你之前也编译过内核,而你没有用此命令去清除之前编译产生的.o文件,那么,在make的时候,可能就会产生干扰。
    编译产生.o文件过程:
    在这里插入图片描述

    ====经过漫长的等待后,终于编译完了,如图所示:
    在这里插入图片描述

    ====这个是我当前环境系统版本:

    ====使用make modules_install 命令进行安装如下:
    在这里插入图片描述
    这些正在安装的.ko文件都是之前我们所选择的,经过编译后产生的驱动文件,现在需要把他们全部安装上,也是需要一些时间的,(半个小时左右)

    ====再使用命令:make install
    在这里插入图片描述

    重新启动系统,如果是虚拟机的话记得重启进入BIOS界面之前一定要点击鼠标进入虚拟机的界面实现键盘捕获。在重启开机界面按住shift键不放手,选择高级选项,进入内核选择加载界面,
    在这里插入图片描述
    选择自己编译的内核,进去就可以了

    然后uname -r 查看一下自己的内核版本:
    在这里插入图片描述
    至此,基本的内核编译就差不多完成了


    2018年9月24日13:12:14

    展开全文
  • 文章原地址:redhat9(内核版本2.4.20-8)编译内核到版本(2.4.26)文章的大部分都转载自网友在编译内核的所写的心路历程,另外有一些个人碰到的问题,我会在括号里标出。 前言 在我写这篇文章的时候,还是一个linux的...
  • 如何编译内核ko

    千次阅读 2017-08-28 23:33:45
    如何编译内核ko
  • linux编译内核出错

    2020-12-08 13:32:29
    LDS arch/x86/boot/compressed/vmlinux.lds AS arch/x86/boot/compressed/head_64.o VOFFSET arch/x86/boot/compressed/../voffset.h CC arch/x86/boot/compressed/misc.o ...编译内核版本:linux-4.8
  • 编译内核步骤

    万次阅读 2016-01-16 18:18:22
    编译内核: (1)把内核文件解压到/usr/src/kernels/目录下。 (2)进入linux-2.6.30.3目录下,执行命令make mrproper删除原来的目标文件和配置文件(第一次编译时执行这个命令,以后再编译时执行make clean就行了...
  • 之前我们编译内核一般也就是使用make –> make modules_install –> make install –> update-grub 这一系列步骤,后来我发现了Debian、Ubuntu机器上可以使用kernel-package这番神器来编译安装内核。kernel-package...
  • Debian编译内核

    千次阅读 2014-11-11 21:52:03
    之前重新编译了好多次,可惜没有一次成功的,说实话,借助Debian强大的dpkg软件包管理,使得重新编译内核仅仅像安装软件一样简单,我都觉得这不是正宗的编译内核,好了,废话不多说,马上进入主题。 下载内核源代码...
  • 编译内核的make命令

    千次阅读 2019-05-05 10:37:20
    编译内核的make命令 问题描述 在编译友善之臂NanoPi NEO Air的Linux-4.14内核时,当我按照wiki说明,使用如下命令进行编译时,编译通过; cd linux touch .scmversion make sunxi_defconfig ARCH=arm CROSS_COMPILE=...
  • 【树莓派】编译内核

    千次阅读 2017-02-19 22:25:50
    更新内核可以获得更稳定的性能以及更多功能,下面介绍如何从源码编译内核编译内核一般有两种方法:在树莓派本地进行编译,或者使用交叉编译。后者速度更快,但也更加复杂。本地编译你需要先安装最新版的Raspbian...
  • 树莓派3b 编译内核之交叉编译

    千次阅读 2019-03-01 20:43:55
    树莓派3b 编译内核之交叉编译 摘要: 最近在学习GNU/Linux的内核驱动编程,使用的硬件平台是树莓派Raspberry Pi 3 Model B V1.2。树莓派部署的操作系统是基于Linux的Raspbian,提供...
  • 树莓派Pi 3B本地编译内核源码

    千次阅读 2019-03-02 19:56:53
    树莓派本地编译内核源码 树莓派的官方系统是不提供内核源码的,也没进行内核编译。在树莓派驱动程序开发的过程中,我们可以使用交叉编译和本地编译。交叉编译在另一篇博文已经讲过,这一次将本地编译。如果不进行...
  • Linux 发行版CentOS 7 编译内核

    千次阅读 2020-04-05 14:23:15
    操作系统作业:编译Linux内核一、实验目的二、环境准备三、操作方法和步骤(1)下载内核并解压(2)配置项(2)编译内核(4)安装(5)重启虚拟机四、总结 一、实验目的 学习怎样重新编译Linux内核。 理解、掌握...
  • 编译内核的意义

    2013-06-21 10:15:39
    编译内核的意义: a、自己定制编译的内核运行更快(具有更少的代码) b、系统将拥有更多的内存(内核部分将不会被交换到虚拟内存中) c、不需要的功能编译进入内核可能会增加被系统攻击者利用的漏洞 d、将某种...
  • 编译内核模块module

    2020-12-12 09:48:03
    在做模块编译的时候,遇到报错,搜索之后没有找到解决方案,作业快交了,还挺急的[face]qq:5.gif[/face] 这是Makefile的内容 obj-m := module.o KERNELBUILD := /lib/modules/`uname -r`/build default: make -...
  • ubuntu18.04 编译内核 学习记录

    万次阅读 多人点赞 2018-10-08 22:26:10
    Android硬件技术的第一章作业有编译内核这一项,参考网上的编译内核过程自己操作了一遍,现在在实验报告里记录下来。 整个过程参考了多篇文章,主要按下面链接这篇教程选取自己需要的部分一步步做的。(因为装的是...
  • linux源码升级编译内核 内核源码更新内核(以linux内核4.11.7为例子)1. 内核更新前的工作准备 a. 系统:ubuntu16.04的Desktop版本,内核为linux-4.8.0; b. 虚拟机VMware Workstation Pro 12,并安装上述...
  • 如何为英伟达TX2编译内核和设备树

    千次阅读 2019-03-16 20:07:44
    编译内核和设备树之前,首先默认已经安装了JetPack,如果没有安装,请参考其它资料进行安装。 1、首先需要下载编译内核需要用到的工具链,通过下面的链接下载。 ... 2、安装工具链,通过下面的命令来安装工具链。...
  • make uImage 编译内核时出错

    千次阅读 2018-08-24 17:45:56
    在做RTC驱动时,修改了arch/arm/plat-s3c24xx/common-smdk.c后,编译内核,发现以下错误: book@www.100ask.org:/work/system/linux-2.6.22.6$ make uImage  CHK include/linux/version.h make[1]: 'include/asm...
  • Ubuntu 精简编译内核

    2014-08-12 15:15:11
    由于最近工作需要频繁编译内核,我就在
  • 虚拟机里Ubuntu编译内核方法

    千次阅读 2017-04-09 19:43:21
    Ubuntu编译内核的教程网上有很多,但大多是双系统或者单独的Linux系统,虚拟机环境中的Ubuntu编译内核方法还是有些不同,且网上教程大多都是多年前发布,或多或少不太适用。下面的方法是我在虚拟机里Ubuntu11.0.4...
  • ubuntu下重新编译内核

    千次阅读 2014-12-26 10:26:26
    1.为什么要编译内核  我们使用的内核好好的,为什么要重新编译安装内核呢?重新编译内核主要是为了:1.尝鲜,linux内核发展很快,一段时间就会发布新版本,增添新功能,但是相关linux的发行版本跟不上linux内核的,...
  • CentOS7编译内核模块

    千次阅读 2018-03-14 08:22:54
    想在CentOS系统直接编译内核模块,然后运行调试,这样做主要还是用于学习Linux内核。当然也可以进行交叉编译,在开发板上跑模块调试,但是,这样做比较慢而且麻烦,因此上网找些办法在CentOS上搭建可以进行内核模块...
  • 编译内核 invalid signature 问题解决

    千次阅读 2019-11-14 18:58:09
    编译内核 invalid signature 问题解决 使用自己编译的内核出现如下问题: error: /vmlinuz-3.10.0 has invalid signature error: you need to load the kernel first 按 F1 进入 BIOS,关闭 Secure Boot ...
  • 在学习使用内核中的驱动模块时,可能需要修改一些源代码,跟踪调试等,这就需要重新编译该模块,一种方式是直接重新编译内核,但是这样耗时较多,而且每次修改的时候都需要这样做就太麻烦了。所以这里介绍另一中方式...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 330,460
精华内容 132,184
关键字:

编译内核