当前位置: 首页 > news >正文

02-Linux内核源码编译

概述

本章,我们主要讲述linux内核编译的步骤。主要是面向想入门嵌入式linux开发的同学。

编译环境设置

默认读者已经安装了ubuntu-20.04系统,对于新入门的同学,建议安装虚拟机的方式,进行开发工作,安装的过程,可以参考

$ sudo apt-get install gawk wget git diffstat unzip texinfo gcc-multilib build-essential chrpath

$ sudo apt-get install libsdl1.2-dev xterm ncurses-dev lzop gcc-arm-linux-gnueabihf ninja-build

$ sudo apt-get install pkg-config libglib2.0-dev libpixman-1-dev

$ sudo apt-get install libfdt-dev zlib1g-dev flex bison libncurses-dev libssl-dev

$ sudo apt-get install libncurses5-dev libssl-dev python3 python3-pip python3-env

$ sudo apt-get install wget cpio unzip rsync bc file gettext texinfo gawk gperf

下载源码

下载步骤

使用git工具下载源码, 作者上传了一份linux内核源码,执行如下的操作,进行下载:

git clone https://gitee.com/yanl1229/EasyLinux.git

如果不想用作者上传的源码,也可以使用如下的方式进行代码下载:

git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

git checkout v5.10.170

源码目录解读

arch:存放于cpu架构相关的kernel实现代码;

block: 块设备IO代码。主要是IO调度算法实现等;

crypto: 内核加密算法库

Documentation:内核文档,主要讲述内核API的使用和一些内核子系统的实现原理;

drivers: 驱动目录,这也是我们以后频繁提及的目录;

fs:文件系统目录,比如Linux内核虚拟文件VFS, ext2, ext4等

include:内核头文件

init:内核初始化代码,比如linux内核C语言入口函数start_kernel

ipc: 进程间通信实现,比如消息队列,共享内存,信号量等实现代码;

kernel:存放与CPU架构无关的内核实现源码;

lib: 内核辅助库函数;

mm: 内存管理实现代码目录;

net:网络协议栈代码目录;

script: 内核构建脚本目录;

sound: 音频子系统,包含音频驱动(这个驱动比较特殊,没有放入drivers目录)

usr: initramfs实现目录;

virt: 内核虚拟化实现目录

tools:存放一些用户空间工具代码;

Linux 内核编译步骤

        我们主要讲述的是嵌入式arm linux驱动开发,因此,在ubuntu主机上编译能让arm硬件板卡运行的linux操作系统,则需要使用到交叉编译工具进行Linux内核编译, 以下的讲述是根据作者上传的源码进行展开,进入首先进入Linux内核源码目录,执行如下操作,即可完成linux内核编译:

a. 内核编译配置:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- versatile_defconfig

参数说明:

ARCH=arm: 指定我们编译arm架构的linux内核;

CROSS_COMPILE: 交叉工具链;

versatile_defconfig:arm硬件平台配置文件。这里我们只是作为一个展示。arm硬件平台的所有配置文件在

arch/arm/configs目录下,感兴趣的同学可以看看。

b. 执行编译

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 编译成功后,如下所示:

注: 手动执行编译,比较繁琐,作者创建了一个shell脚本,让脚本自动化完成编译。使用脚本编译步骤为:

./build.sh versatile

运行体验

为了让新入门的同学,体验Linux内核编译和运行,作者上传了一份编译好的linux系统仿真环境qemu。只有内核是无法体验的,因此作者也上传了一份文件系统构建工具buildroot。执行作者编辑好的脚本,就会自动构建linux系统运行的文件系统,执行如下的命令:

./build.sh versatile

当编译完成后,执行./build.sh run命令,则进行arm平台Linux系统的运行。运行截图如下所示:

总结

本文主要讲述了如下下载Linux源码进行编译和运行。在讲述过程中提及到了git, shell脚本编写,和buildroot文件系统构建工具,这三个工具在日常开发中会经常提及,感兴趣的同学可以深入学习一下。

注: 构建linux文件系统的工具非常多。我们这里只讲述buildroot, 因为他简单,适合新手学习,其他的文件系统构建还有busybox和yocto等。

相关文章:

  • 网站多语言建设seo关键词排名优化系统源码
  • 收藏的网站从做系统后找不到了百度电话客服24小时人工
  • 三端互通传奇手游找服网站链接买卖
  • 廊坊哪些公司做网站杭州seo的优化
  • 免费建网站系统网站注册域名
  • wordpress 设置数据库如何优化网络速度
  • 【WCF】单例模式的线程安全缓存管理器实现,给你的WebApi加入缓存吧
  • 【网络安全】从IP头部看网络通信:IPv4、IPv6与抓包工具 Wireshark 实战
  • Leaflet面试题200道
  • 多光谱扫描技术在实物建模中的应用:如何实现1:1真实材质还原
  • OpenCV CUDA模块设备层-----检查 CUDA 错误并输出调试信息内联函数checkCudaError()
  • 网络安全攻防:2025年新型钓鱼攻击防御指南
  • 安卓android com.google.android.material.tabs.TabLayout 设置下拉图标无法正常显示
  • Rust 项目实战:单线程 Web 服务器
  • RabbitMQ + JMeter 深度集成指南:中间件性能优化全流程解析!
  • 国际数字影像产业园2.0:数字技术赋能影像文创的生态重构
  • STM32[笔记]--4.嵌入式硬件基础
  • ingress-nginx的443端口不监听了
  • WPF/Net Core 简单显示PDF
  • HTML炫酷烟花
  • 【51单片机外部中断0控制流水灯2次】2022-5-4
  • 【大模型问题】ms-swift微调时,显存持续增长原因分析与解决方案
  • AIoT时代指纹模块的三大颠覆性进化
  • 论文阅读:2025 arxiv Qwen3 Technical Report
  • ros(一)使用消息传递图像+launch启动文件
  • Linux平台Oracle开机自启动设置