精华内容
下载资源
问答
  • 编译树莓派Linux内核
    千次阅读
    2021-09-03 15:09:23

      Raspberry Pi 内核Linux代码存储在 GitHub 中,可以在github.com/raspberrypi/linux上查看。

    一、下载linux内核源码

    git clone --depth=1 https://github.com/raspberrypi/linux
    

      上面的命令将下载当前的活动分支。省略–depth=1将下载整个存储库,包括所有分支的完整历史记录,但占用更多的存储空间。要下载不同的分支,可以使用以下–branch选项:

    git clone --depth=1 --branch <branch> https://github.com/raspberrypi/linux
    

    二、在本地编译linux内核

      在本地编译就是在树莓派上编译linux内核

    2.1、安装 Git 和构建依赖项

    sudo apt install git bc bison flex libssl-dev make
    

    2.2、配置内核

      对于 Raspberry Pi 1、Pi Zero、Pi Zero W 默认构建配置

    cd linux
    KERNEL=kernel
    make bcmrpi_defconfig
    

      对于 Raspberry Pi 2、Pi 3和 Pi 3+

    cd linux
    KERNEL=kernel7
    make bcm2709_defconfig
    

      对于 Raspberry Pi 4 默认构建配置(32 位)

    cd linux
    KERNEL=kernel7l
    make bcm2711_defconfig
    

      对于 Raspberry Pi 4 默认构建配置(64 位)

    cd linux
    KERNEL=kernel8
    make bcm2711_defconfig
    

    2.3、编译、安装linux内核

      构建并安装内核、模块和设备树。 对于 32 位内核:

    make -j4 zImage modules dtbs
    sudo make modules_install
    sudo cp arch/arm/boot/dts/*.dtb /boot/
    sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
    sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
    sudo cp arch/arm/boot/zImage /boot/$KERNEL.img
    

      对于 64 位内核:

    make -j4 Image modules dtbs
    sudo make modules_install
    sudo cp arch/arm64/boot/dts/*.dtb /boot/
    sudo cp arch/arm64/boot/dts/overlays/*.dtb* /boot/overlays/
    sudo cp arch/arm64/boot/dts/overlays/README /boot/overlays/
    sudo cp arch/arm64/boot/zImage /boot/$KERNEL.img
    

    三、交叉编译linux内核

    3.1安装依赖项和工具链

      安装所需的依赖项

    sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
    

      为 32 位内核安装 工具链

    sudo apt install crossbuild-essential-armhf
    

      为 64位内核安装 工具链

    sudo apt install crossbuild-essential-arm64
    

    3.2、配置内核

    3.2.1、配置32位

      对于 Pi 1、Pi Zero、Pi Zero W

    cd linux
    KERNEL=kernel
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig
    

      对于 Pi 2、Pi 3、Pi 3+

    cd linux
    KERNEL=kernel7
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
    

      对于树莓派 4:

    cd linux
    KERNEL=kernel7l
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig
    

    3.2.2、配置64位

      对于 Pi 3、Pi 3+

    cd linux
    KERNEL=kernel8
    make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcmrpi3_defconfig
    

      对于树莓派 4:

    cd linux
    KERNEL=kernel8
    make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
    

    3.3、编译linux内核

      对于所有 32 位版本

    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
    

      对于所有 64 位版本

    make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
    

    3.4、安装linux内核到SD卡

      在插入SD卡之后通过命令lsblk来识别SD卡,并收到以下相应

    sdb
       sdb1
       sdb2
    

      其中sdb1是FAT(boot)分区,sdb2是ext4文件系统(root)分区。
      首先挂载这两个分区,并调整分区号:

    mkdir mnt
    mkdir mnt/fat32
    mkdir mnt/ext4
    sudo mount /dev/sdb1 mnt/fat32
    sudo mount /dev/sdb2 mnt/ext4
    

    3.4.1、将linux内核模块安装到 SD 卡上

      对于32位:

    sudo env PATH=$PATH make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=mnt/ext4 modules_install
    

      对于64位:

    udo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=mnt/ext4 modules_install
    

    3.4.2、将设备树安装到 SD 卡上

      对于32位:

    sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img
    sudo cp arch/arm/boot/zImage mnt/fat32/$KERNEL.img
    sudo cp arch/arm/boot/dts/*.dtb mnt/fat32/
    sudo cp arch/arm/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
    sudo cp arch/arm/boot/dts/overlays/README mnt/fat32/overlays/
    sudo umount mnt/fat32
    sudo umount mnt/ext4
    

      对于64位:

    sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img
    sudo cp arch/arm64/boot/Image mnt/fat32/$KERNEL.img
    sudo cp arch/arm64/boot/dts/broadcom/*.dtb mnt/fat32/
    sudo cp arch/arm64/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
    sudo cp arch/arm64/boot/dts/overlays/README mnt/fat32/overlays/
    sudo umount mnt/fat32
    sudo umount mnt/ext4
    
    更多相关内容
  • Ubuntu18.04编译和切换Linux内核版本 编译内核 内核版本 linux-5.2.5.tar.xz 安装依赖项 sudo apt-get install build-essential sudo apt-get install libncurses5-dev sudo apt-get install flex sudo apt-get ...
  • 驱动程序的使用可以按照两种方式编译,一种是静态编译内核,另一种是编译成模块以供动态加载。...本文以uClinux为例,介绍在一个以模块方式出现的驱动程序test.c基础之上,将其编译内核的一系列步骤。
  • linux内核编译.config文件,编译出的内核很小,用于内核调试,内核版本4.19.23
  • linux内核之源码编译

    千次阅读 2020-07-06 21:39:53
    linux内核之源码编译

    linux内核之源码编译


    如需转载请标明出处:http://blog.csdn.net/itas109
    QQ技术交流群:129518033

    环境:
    系统:Ubuntu 20.04
    内核版本:5.4.0-26-generic
    升级的内核版本:5.4.50

    1.下载linux内核

    wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.4.50.tar.xz
    

    wget https://mirror.bjtu.edu.cn/kernel/linux/kernel/v5.x/linux-5.4.50.tar.xz
    

    2.安装所需前置软件

    sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
    

    centos可参考(未验证)

    sudo yum install gcc bc gcc-c++ ncurses ncurses-devel cmake elfutils-libelf-devel openssl-devel
    

    注意:至少需要12GB的磁盘空间来完成内核的编译过程
    在这里插入图片描述

    3.解压源码

    tar xvJf linux-5.4.50.tar.xz
    

    使用cd linux-5.4.50进入目录

    4.清理内核源目录

    make mrproper
    make clean
    

    5.配置内核参数

    编译内核的方式:

    • make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
    • make xconfig(基于图形窗口模式的配置界面,xwindow下推荐使用)
    • make oldconfig(只在原来内核配置上略作修改)
    • make config(基于文本的最为传统的配置界面,不推荐使用)

    最终都会生成.config文件
    在这里插入图片描述
    在这里插入图片描述
    小技巧:
    在正式编译内核之前,必须配置需要包含哪些模块。
    有个一个好的办法就是直接复制当前系统的内核配置文件,然后使用menuconfig命令来进行修改部分所需参数。这样可以最大程序兼容原有参数。(高度定制化可以忽略该步骤,直接进行内核参数配置)

    cp /boot/config-$(uname -r) .config
    

    6.编译内核

    CPU intel i5-6500使用4线程虚拟机大约需要80分钟左右

    make -j8
    

    7.安装内核和模块

    安装模块(大约需要5分钟)

    sudo make modules_install
    

    安装内核(大约需要3分钟)

    sudo make install
    

    8.启用内核作为引导

    将内核启用来作为引导

    sudo update-initramfs -c -k 5.4.50
    

    更新 grub

    sudo update-grub
    

    重启系统可以选择新安装的内核

    9.结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    10.其他

    问题1:重启出错 end Kernel panic - not syncing: System is deadlocked on memory

    解决:
    由于虚拟机内存不足导致(原来设置2GB),调整成4GB后成功启动


    License

    License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎

    如需转载请标明出处:http://blog.csdn.net/itas109
    QQ技术交流群:129518033


    Reference:
    1.https://www.linux.com/topic/desktop/how-compile-linux-kernel-0/

    展开全文
  • ARM-Linux内核编译流程

    2016-10-16 14:56:47
    适合arm-linux内核编译, 包含u-boot,kernel,rootfs
  • 操作系统作业:编译Linux内核一、实验目的二、环境准备三、操作方法和步骤(1)下载内核并解压(2)配置项(3)编译内核(4)安装(5)重启虚拟机四、总结 一、实验目的 学习怎样重新编译Linux内核。 理解、掌握...
  • linux内核模块的编译。 1、准备内核模块源码 2、编写Makefile文件 3、编译模块 4、加载/卸载模块 5、加载模块时传递参数 6、总结
  • Linux内核编译配置选项详解,可以帮助您了解内核配置。
  • 如何编译Linux内核源码?

    千次阅读 2021-11-13 22:32:23
    本文从下载并编译Linux内核、编译busybox、制作一个最小的根文件系统,最后用qemu启动你编译好的内核和根文件系统 ,初步感受Linux内核的魅力所在。 Linux用途广泛,包含的内容也琳琅满目。Linux系统的基础是内核、...

    前言

    学习Linux内核是一件振奋人心的事情,而在学习伊始对Linux内核的成功编译并运行一个mini版的文件系统也更会燃起更足的动力去钻研。本文从下载并编译Linux内核、编译busybox、制作一个最小的根文件系统,最后用qemu启动你编译好的内核和根文件系统 ,初步感受Linux内核的魅力所在。

    Linux用途广泛,包含的内容也琳琅满目。Linux系统的基础是内核、C库、工具集合系统的基本工具(如登录程序和Shell)。应用程序通过system call陷入内核,内核又通过驱动程序来与硬件交互。

    img应用程序、内核和硬件的关系

    首先明确两点:

    1. 配置内核就是你来决定编码哪些代码;
    2. 编译内核就是生成可执行文件的一个过程。

    再明确内核文件的产物名称:

    • vmlinux:原始的,未经压缩的内核可执行文件
    • zImage:压缩过的可执行文件——压缩vmlinux后,加上一个head part(用来解压)
    • uImage:用于给uboot引导的zImage
    • bzImage:即bigzImage ,通过gzip压缩的

    好了,明确了上述几点,就可以开始实验了。本文的实验环境如下:

    • Linux系统:ubuntu 14.04
    • linux源码版本:linux-4.9.229
    • busybox源码版本:busybox-1.30.0
    • qemu-system-x86_64版本:2.0.0

    1.下载并编译Linux内核

    https://www.kernel.org/

    下载并解压后,进入目录。

    1.指定硬件体系架构

    为了演示方便,选用了x86架构,如果编译arm则需要再下载对应的toolchain。

    $ export ARCH=x86
    

    2.配置board config

    $ make  x86_64_defconfig
    

    3.配置内核

    这一步其实是对第2步的进行微调,这里我们使用基于ncurse库编制的图形界面工具:

    $ make menuconfig
    

    如果执行该命令时出现:

    img

    原因:缺少ncurses dev工具

    sudo apt-get install libncurses5-dev
    

    如果需要内核支持ramdisk驱动,需要选中如下配置:

    General setup  --->
           ----> [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
        Device Drivers  --->
           [*] Block devices  --->
                   <*>   RAM block device support
                   (65536) Default RAM disk size (kbytes)
    

    4.编译内核

    $ make -j8
    

    编译成功后的内核位于:arch/x86_64/boot/bzImage

    至此,内核编译完成。

    2.编译busybox

    什么是busybox?

    busybox号称“嵌入式Linux的瑞士军刀”。BusyBox工具小巧高效,可以替代一大批常用的标准Linux命令行工具,功能有所简化,非常适合资源有限的嵌入式平台。BusyBox是模块化且高度可配置的,可以对其进行裁剪以满足特定需求。

    在如下链接下载busybox:

    https://busybox.net/downloads/busybox.net/downloads/

    我们以busybox-1.30.0作为实验对象。

    下载之后解压并进入该busybox目录开始配置并编译。这里把busybox配置为静态编译,这样不依赖其他动态库比较容易操作和演示。编译则似曾相识,与编译内核的指令是一样的!

    $ make menuconfig
    
    Busybox Settings  --->
          Build Options  --->
                [*] Build BusyBox as a static binary (no shared libs)
    

    配置完之后进行编译和安装

    $ make && make install
    

    make是编译busybox,make install是为了在对应目录中编译安装一系列的工具。

    编译完成后的busybox就安装在源码根目录下的_install目录了。

    总结

    至此,我们对Linux内核和busybox进行了配置和编译。光编译肯定不过瘾,下一讲来演示如果基于busybox制作一个简单的文件系统,并通过qemu模拟器运行Linux,真正的让内核工作起来!

    在这里插入图片描述

    展开全文
  • linux 内核学习3-自己编译一个ARM Linux内核 1. 目的 编译一个ARM版本的内核镜像,谁让我是做Android的呢!并且在QEMU上运行。 2. 准备工作 2.1 开发环境 ubuntu 18.4虚拟机 linux内核版本 4.19.67 linux内核地址 ...

    linux 内核学习3-自己编译一个ARM Linux内核

    1. 目的

    编译一个ARM版本的内核镜像,谁让我是做Android的呢!并且在QEMU上运行。

    2. 准备工作

    2.1 开发环境

    1. ubuntu 18.4虚拟机
    2. linux内核版本 4.19.67 linux内核地址
    3. busybox 工具包

    3.编译过程

    3. busybox编译

    $ cd busybox
    $ export ARCH=arm
    $ export CROSS_COMPILE=arm-linux-gnueabi-
    $ make menuconfig
    

    进入menuconfig之后,配置成静态编译

    Busybox Settings  ---->
    	Build Options     ---->
    			[*] Build BusyBox as a static binary  (no shared libs)
    
    # make && make install
    

    3.2创建必须的文件

    这个时候在busybox根目录下回有一个_install目录,该目录存放了编译好的文件系统需要的一些命令合计
    将_install 目录复制到linux-4.0 目录下。进入_install 目录,先创建etc、dev等目录。

    # mkdir etc
    # mkdir dev
    # mkdir mnt
    # mkdir -p etc/init.d/
    

    在_install /etc/init.d/目录下新建一个rcS文件,并写入如下内容

    mkdir -p /sys
    mkdir -p /tmp
    mkdir -p /proc
    mkdir -p /mnt
    /bin/mount -a
    mkdir -p /dev/pts
    mount -t devpts devpts /dev/pts
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    mdev -s
    

    修改_install/etc/init.d/rcS 文件需要可执行权限,可以使用chmod命令来实现,比如chmod +x_install/etc/init.d/rcS
    在_install /etc 目录中新建一个fstab文件,并写入如下内容。

    proc /proc proc defaults 0 0
    tmpfs /tmp tmpfs defaults 0 0
    sysfs /sys sysfs defaults 0 0
    tmpfs /dev tmpfs defaults 0 0
    debugfs /sys/kernel/debug debugfs defaults 0 0
    

    文件

    在_install /etc 目录中新建一个inittab文件,并写入如下内容

    ::sysinit:/etc/init.d/rcS
    ::respawn:-/bin/sh
    ::askfirst:-/bin/sh
    ::ctrlaltdel:/bin/umount -a -r
    

    _install/dev 目录中创建如下设备结点,这时需要root权限。

    cd _install/dev/
    sudo mknod console c 5 1
    sudo mknod null c 1 3
    

    c创建的文件

    3.3. 编译内核配置

    $ cd linux-4.0
    $ export ARCH=arm
    $ export CROSS_COMPILE=arm-linux-gnueabi-
    $ make vexpress_defconfig
    $ make menuconfig
    
    1. 配置 initramfs,在 initramfs source file 中填入_install ,并把Default kernel command string清空

    接着

     General setup  --->  
    		  [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support 
            		 (_install) Initramfs source file(s)  
    
    Boot options --->
    	()Default kernel command string
    
    Kernel Features --->
    	Memory split(3G/1G user/kernel split)--->
    	[*] High Memory Support
    

    注意,(_install) Initramfs source file(s)这个要通过enter键进入,输入_install

    3.4 开始编译内核

    $ make bzImage -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-
    $ make dtbs
    

    3.5 运行QEMU虚拟机

     qemu-system-arm -M vexpress-a9 -smp 4 -m 200M -kernel arch/arm/boot/zImage -append "rdinit=/linuxrc console=ttyAMA0 loglevel=8" -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic
    
    

    4.其他

    这里的操作流程参考的是奔跑吧linux内核入门篇。大家想学习linux内核,可以去买奔跑吧linux内核 入门篇和奔跑吧linux内核。
    这里给到作者笨叔叔的学习资料 github地址 这里有笨叔叔调教好的linux内核。这来有他的视频教程 视频地址 内核地址

    展开全文
  • linux内核编译步骤

    千次阅读 2021-05-13 00:47:31
    linux内核编译步骤对于linux新手来说,编译内核相对有一些难度,甚至不知道如何入手,我通过在网上收集这方面的资料,最终编译成功.现在我归纳了一下,写出这篇还算比较详细的步骤,希望能对各位新手有一些帮助。1...
  • Linux内核编译

    万次阅读 多人点赞 2018-09-03 15:38:41
    下面简单介绍一下Linux内核编译过程。(附注:本博客所讲的内容是在Ubuntu上进行操作的,Cent OS并未验证) 1、下载内核源码,可以到kernel.org上进行下载。 2、解压内核源文件(注意:要先使用cd命令进入压缩包...
  • CentOS下编译Linux内核

    千次阅读 2022-03-23 15:14:36
    编译内核是项很简单的事情,但却是进入Linux内核世界的第步,想要开发内核代码,想要了解内核的运行机制,第步就是编译Linux内核,以下是在centos7.5环境下编译内核的具体流程。 1、下载内核 内核的源码的...
  • Linux内核开发_1_编译LInux内核

    千次阅读 多人点赞 2020-05-13 01:23:32
    Linux内核版本: cat /proc/version Linux version 4.15.0-20-generic (buildd@lgw01-amd64-039)\ (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 ...
  • Linux内核编译与升级

    千次阅读 2022-04-03 17:02:20
    linux 内核编译与升级
  • windows编译linux内核

    千次阅读 2020-07-28 13:27:06
    安装msys2 ...make config #遍历选择编译内核功能 make allyesconfig #启用内核全部功能 make allnoconfig #内核功能选项全部为否 make menuconfig #开启文本菜单选项,对窗口有限制,尽量调大窗口
  • 嵌入式Linux内核编译

    千次阅读 2019-04-10 11:16:49
    实验环境 VMware Workstation Player Ubuntu16.04 s5p4418-kitkat.tar.bz2.aa 、 s5p4418-kitkat.tar.bz2.ab、android-patch.tgz、arm-2009q3.tar.bz2系统源码...Linux内核配置与编译 将系统源码(s5p4418-kitka...
  • clang编译linux内核

    千次阅读 2020-11-10 17:38:50
    我的环境是Ubuntu18.04,linux内核是5.7.12,clang版本11.0.0,cmake版本3.18.4 必要的环境依赖: sudo apt-get install gcc make libncurses5-dev openssl libssl-dev sudo apt-get install build-essential sudo...
  • 树莓派Linux内核源码的下载,编译,以及更换Linux树莓派的内核方法
  • 如何编译Linux 内核模块

    万次阅读 2018-11-03 09:44:58
    ubuntu版本:ubuntu-gnome-16.04-desktop-amd64,gnome版 ---------------------------------------------------------...本文主要介绍如何在内核编译内核模块,即: how to build an out-of-tree kernel module...
  • linux内核编译原理

    2011-08-15 11:26:29
    linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核...
  • 自己动手编译Linux内核 自己动手编译Linux内核 整理了一下Linux内核编译的方法,原始内核版本为Linux-2.4.20.8,新内核版本为Linux-2.4.22,其它内核版本编译方法类似。
  • 怎么编译Linux内核

    千次阅读 2020-11-24 14:59:30
    Linux内核(英语:Linux kernel)是种开源的类Unix操作系统宏内核。整个Linux操作系统家族基于 该内核部署在传统计算机平台(如个人计算机和服务器,以Linux发行版的形式)和各种嵌入式平台,如路由器、无线接入点...
  • 编译linux内核源码,安装、删除内核

    万次阅读 多人点赞 2018-11-04 01:20:54
    Linux内核编译、安装流程 本博客属于原创,转载请注明来源 此处只讲linux内核编译步骤至于安装虚拟机,安装ubuntu操作系统请自行百度 ...第步:下载linux内核源码 官网地址地址:https://www.kernel.org/ ...
  • Linux 编译并更换内核

    万次阅读 多人点赞 2021-06-01 01:18:11
    我们可以针对自己的情况,量体裁衣,定制适合自己的系统,这样就需要重新编译内核
  • 在Ubuntu 18.04上编译Linux内核

    万次阅读 多人点赞 2018-10-14 23:30:18
    编译环境我选择了Ubuntu 18.04的虚拟机,内核截止2018-10-14最新版为4.18.14,笔者即将编译版本 请确保磁盘空间足够,笔者之前20G编译到最后空间不足,还得重来 如果你想要查看您的空间大小或者扩充磁盘,请...
  • 如何编译你自己的linux内核.txt如何编译你自己的linux内核.txt如何编译你自己的linux内核.txt如何编译你自己的linux内核.txt如何编译你自己的linux内核.txt如何编译你自己的linux内核.txt如何编译你自己的linux内核....
  • 编译升级Linux内核(图文)

    千次阅读 2019-06-10 09:47:49
    内核,是操作系统的核心部分,所以对于内核的升级就变的尤为重要,内核每次更新都会优化功能,解决bug,提升效率,支持新功能,主要是面对服务、网络、开发应用的,下面就来介绍一下如何编译升级内核版本。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 278,401
精华内容 111,360
关键字:

如何编译一个linux内核