linux源码无法编译-Linux内核初始编译及源代码结构

1.获取Linux内核

Linux由Linux基金会管理和发布。 Linux的官方网站是org,因此如果您获得最新版本的Linux,可以从该网站下载。 网站界面如右图所示:

通常半导体厂商会从官网下载某个版本的Linux内核,移植到自己的CPU上,测试成功后开放给半导体厂商的CPU开发人员。 开发人员下载他们提供的Linux内核,然后将其移植到他们的产品中。

在本文中,我们使用NXP提供的Linux源代码,文件名为:

linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2

2.Linux内核的第一次编译

在编译内核之前,需要在ubuntu上安装lzop库。 另外,图形化配置工具还需要ncurses库的支持。 安装命令为:

sudo apt-get install lzop
sudo apt-get install build-essential 
sudo apt-get install libncurses5-dev

在Ubuntu中新建一个文件夹,然后将linux内核压缩包复制到该文件夹​​中并解压。 解压命令为:

tar -vxf linux-imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2

解压后进入该文件夹,新建build.sh脚本文件进行编译linux源码无法编译,脚本内容如下:

#!/bin/sh 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_mfg_defconfig 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig 
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

授予脚本可执行权限,然后运行它。 编译时会弹出Linux图形配置界面。 这里不需要做任何配置,只需按两下ESC键即可退出图形界面

以后您将手动开始编译Linux内核并等待编译完成。 完成后会显示在右侧

编译完成后,会在arch/arm/boot目录下生成一个zImage文件,该文件就是要使用的Linux镜像文件。另外,在arch/arm/boot/dts下还会生成很多.dtb文件。 这种.dtb就是设备树文件

vmlinux、Image、zImage、uImage的区别:

3.Linux内核源码结构

Linux内核编译过程会生成一些文件。 我们看一下编译前后的内核源码结构。 可以看到,多了一些编译好的文件。

编译后的内核源代码比未编译的源代码有更多的文件。 此类文件或文件夹的含义如下表所示:

上表中很多文件夹和文件不需要关注,需要关注的文件夹或文件如下

arch目录:与架构相关的目录,如arm、arm64、avr32、x86等。每种架构对应一个目录,该目录下有很多子目录,如boot、common、configs等。

block目录:block是Linux下块设备的目录。 SD卡、EMMC、NAND、硬盘等存储设备都属于块设备。 块目录存放管理块设备的相关文件

Crypto目录:存放加密文件,如常见的crc、crc32、md4、md5、hash等加密算法

文档目录:存放Linux相关文档。 如果你想了解Linux的某个功能模块或者驱动框架的作用,可以查看Documentation目录下是否有对应的文档。

Drivers目录:驱动程序目录文件。 该目录按照不同类型的驱动程序进行排序。 比如drivers/i2c是I2C相关的驱动目录,drivers/gpio是GPIO相关的驱动目录,需要注意。

固件目录:该目录用于存放固件

fs目录:存放文件系统,如fs/ext2、fs/ext4、fs/f2fs等,分别是ext2、ext4、f2fs等文件系统

include目录:头文件目录

init目录:存放Linux内核启动时的初始化代码

ipc目录:IPC就是进程间通信,ipc目录是进程间通信的具体实现代码

kernel目录:Linux内核代码

lib目录:lib的意思是库,lib目录是一些常用的库函数

mm目录:存放显存管理相关代码

net目录:存放网络相关代码

Samples目录:存放一些示例代码文件

scripts目录:脚本目录,Linux编译时会用到很多脚本文件,此类脚本文件就保存在该目录下

security目录:存放安全相关文件

sound目录:存放音频相关的驱动文件,音频驱动文件并不存放在drivers目录下,而是一个单独的目录

tools目录:存放编译时使用的一些工具

usr目录:存放initramfs相关代码

virt目录:存放虚拟机相关文件

.config文件:和uboot一样,.config保存了Linux的最终配置信息,编译时会读取这个文件中的配置信息。最后根据配置信息linux源码无法编译,选择编译什么模块和函数

Kbuild文件:一些Makefile读取这个文件

kconfig文件:图形配置界面的配置文件

Makefile:Linux顶层的Makefile,建议仔细阅读这个文件

README文件:该文件详细说明了如何编译Linux源码以及Linux源码的目录信息

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 源码编译 linux源码无法编译-Linux内核初始编译及源代码结构 https://www.wkzy.net/game/178026.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务