长生栈 长生栈
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Living Team

编程技术分享
首页
  • 编程语言

    • C语言
    • C++
    • Java
    • Python
  • 数据结构和算法

    • 全排列算法实现
    • 动态规划算法
  • CMake
  • gitlab 安装和配置
  • docker快速搭建wordpress
  • electron+react开发和部署
  • Electron-创建你的应用程序
  • ImgUI编译环境
  • 搭建图集网站
  • 使用PlantUml画时序图
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机视觉

  • ESP32开发

  • Linux系统移植

    • Linux系统移植(一)--- 交叉编译工具链的配置
    • Linux系统移植(二)--- Uboot移植
    • Linux系统移植(三)--- Linux kernel移植
      • 下载源码
      • 配置
      • 编译
        • 安装依赖
        • 编译源码
      • 参考文章
    • Linux系统移植(四)--- 使用busybox制作根文件系统(rootfs)
    • Linux系统移植(五)--- 制作、烧录镜像并启动Linux
  • 快速开始

  • 编程小知识

  • 技术
  • Linux系统移植
DC Wang
2024-02-05
目录

Linux系统移植(三)--- Linux kernel移植

# Linux系统移植(三)--- Linux kernel移植

以Orange Pi Zero3为例,编译配置Linux kernel。

# 下载源码

可以在官网下载:

官方网站: The Linux Kernel Archives (opens new window)

image-20240204213850813

wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.7.3.tar.xz
tar -xvf linux-6.7.3.tar.xz
cd linux-6.7.3
1
2
3

也可以在GitHub下载:

github: torvalds/linux: Linux kernel source tree (github.com) (opens new window)

git clone https://github.com/torvalds/linux.git
1

截至到2024/02/04,Orange Pi Zero3的设备树文件已经合并到代码中了,所以省去了调整设备树的工作

# 配置

执行以下命令来生成开发板默认配置

make ARCH=arm64 CROSS_COMPILE=aarch64-livingteam-linux-gnu- defconfig
1
  • 体系结构我们是arm64,所以ARCH=arm64
  • CROSS_COMPILE=aarch64-livingteam-linux-gnu- (参考 Linux系统移植(一)--- 交叉编译工具链的配置 | 长生栈 (livingteam.cn) (opens new window) )

ARM64机构相关硬件的配置文件现在只有一个defconfig,在arch/arm64/configs下,这和之前arm的系统结构的不一样,之前arch/arm/configs下面各个厂商的芯片的默认配置文件都在那里有多个,而arm64共用这一个,可能也是现在kernel对arm64支持没那么好,因为arm64比较新。

执行上面指令之后在源码树顶层目录会生成一个.config文件,就是配置结果文件。

name这个配置文件由于是所有arm64芯片厂家共用,肯定有很多其他芯片相关冗余代码,当然也包含全志的arm64相关h6支持代码,所以需要进一步做些裁剪。

下面采用图形窗口方式来配置裁剪:

make ARCH=arm64 CROSS_COMPILE=aarch64-livingteam-linux-gnu- menuconfig
1

出来这个熟悉窗口:

image-20240204214813280

platform selection平台选择,将allwinner sunxi 64-bit soc Family留下,其它厂家的芯片支持全部去掉。

另外,ARMv8 software model这一项保留,因为查看它的help,这一项和电源管理(PM)相关支持代码,肯定要留。最终结果如下图所示:

image-20240204214905641

至于其他选项,比如device driver,设备驱动这些后面我们根据具体硬件情况再做进一步慢慢配置或者修改,这样就完成了一个内核初步配置。

# 编译

# 安装依赖

sudo apt update
sudo apt install gcc aarch64-linux-gnu-gcc uuid-dev python3-dev libgnutls28-dev swig
sudo apt install build-essential libncurses-dev bison flex libssl-dev
1
2
3

这条命令将安装以下工具:

  • gcc: 本地 C 编译器
  • aarch64-linux-gnu-gcc: ARM64 交叉编译器
  • uuid-dev: 提供 uuid/uuid.h 文件的开发库
  • python3-dev: 提供 Python.h 文件的 Python 开发库
  • libgnutls28-dev: 提供 gnutls/gnutls.h 文件的 GnuTLS 开发库
  • swig: 用于生成 C/C++ 和其他语言之间接口的工具
  • build-essential: 包含了编译工具链和头文件等基本工具
  • libncurses-dev: 提供 ncurses.h 文件的开发库
  • bison: 用于生成语法分析器的工具
  • flex: 用于生成词法分析器的工具
  • libssl-dev: 提供 openssl/ssl.h 文件的 OpenSSL 开发库

# 编译源码

执行下面指令进行编译源码,生成linux内核镜像:

make ARCH=arm64 CROSS_COMPILE=aarch64-livingteam-linux-gnu- Image -j8
1

编译完成,会在arch/arm64/boot目录下生成Image内核镜像文件。

执行下面命令,会生产设备树文件:

make ARCH=arm64 CROSS_COMPILE=aarch64-livingteam-linux-gnu- dtbs -j8
1

这样会把所有的硬件的设备树全部编译,前面我们查找过,orange pi zero 3这款开发板的设备树是arch/arm64/boot/dts/allwinner/sun50i-h618-orangepi-zero3.dts,该文件会被编译成sun50i-h618-orangepi-zero3.dtb文件。

最终编译结果会生成在arch/arm64/boot/目录下,我们需要的两个文件分别如下:

arch/arm64/boot/Image
arch/arm64/boot/dts/allwinner/sun50i-h618-orangepi-zero3.dtb
1
2

至此,适用于Orange Pi Zero3的linux kernel编译完毕。

# 参考文章

从零开始移植最新版本(2023.10)主线Linux到Orange Pi 3(全志H6) - 知乎 (zhihu.com) (opens new window)

编辑 (opens new window)
#Linux#Linux系统移植#嵌入式
Linux系统移植(二)--- Uboot移植
Linux系统移植(四)--- 使用busybox制作根文件系统(rootfs)

← Linux系统移植(二)--- Uboot移植 Linux系统移植(四)--- 使用busybox制作根文件系统(rootfs)→

最近更新
01
ESP32-网络摄像头方案
06-14
02
ESP32-PWM驱动SG90舵机
06-14
03
ESP32-实时操作系统freertos
06-14
更多文章>
Theme by Vdoing | Copyright © 2019-2025 DC Wang All right reserved | 辽公网安备 21021102001125号 | 吉ICP备20001966号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式