LINUX内核编译(2)下载及编译内核

编译内核,就要有内核源码,可以从不同官网下载内核源码,有的硬件厂商针对自己开发板,也提供了一些修改了的内核源码。这次要编译的内核针对NXP  i.MX 7 计算机模块 - Colibri iMX7。

https://www.toradex.cn/computer-on-modules/colibri-arm-family/nxp-freescale-imx7

ARM硬件:Colibri iMX7

操作系统:Ubuntu19 64bit

题外话,交叉编译,即在X86架构电脑上的编译器编译的内核或程序运行在ARM架构上。我使用X86电脑(64位)windows系统下,安装了虚拟机(vmware),且在虚拟机中安装了ubuntu19和配置好了交叉编译器。接下来就是下载和编译内核。

 

1、源码下载

下载方式有两种:

(1) 从Toradex服务器下载内核源码 https://git.toradex.com/cgit/

(2) 使用GIT获取linux内核源码

git clone -b tegra git://git.toradex.com/linux-toradex.git 

 

2、源码编译

将下载的内核源码解压,解压完成后进入到该目录中,如:cd linux-toradex

2.1 内核配置

第一步:配置内核准备工作

就是配置编译工具链,要配置哪些功能,要编译哪些模块到内核等等。首先要设置硬件环境,方法有两种:

方法1:这应该是官方提供的Makefile添加的功能,使用:make colibri_imx7_defconfig。执行该命令就可以把colibri_imx_defconfig自动配置为.config。

方法2:colibri_imx_defconfig从哪里来的呢?方法1是如何实现的?这里就手动实现,进入到arch/arm/configs目录下,可以找到colibri_imx7_defconfig。拷贝该文件到该内核源码的顶层目录(即linux-toradex目录下)。

将colibri_imx7_defconfig重命名为.config,这样就完成了内核硬件配置的第一步。

 

第二步:配置编译内容

sudo make menuconfig

如果出现如下界面,表示.config文件正常。这里面需要做一些基础的配置。

选择进入到General setup --->

->Cross-compiler tool prefix

编译内核的时候,需要指定交叉编译链,选择该选项,填入:arm-linux-gnueabihf-

->Compile also drivers which will not load

在其他平台编译以便测试驱动程序编译流程,通常不需要。

->Local version - append to kernel release

附加额外的字符串到内核版本信息后面,以及localversion*文件内容后面。通常用于我们的版本管理,所以自己定义。我们写入个-1.0

->Automatically append version information to the version

查找git标记的版本号信息,附加到localversion*文件内容后面,以及CONFIG_LOCALVERSION设置值得后面。

这里会在后面添加dirty,可以取消自动附加。按下空格键可以设置[ ]为空即可。

更多信息请参考:《内核编译选项详解》

 

配置编译内容:

这里我需要将一个USB转串口驱动编译进内核,所以我需要选择如下:

Device Drivers ---> USB support ---> USB Serial Convertor support ---> 

按下空格修改为:<M>  USB Winchiphead CH34X_ACM Single Port Serial Driver

下载来的内核源码里是没有USB Winchiphead CH34X_ACM Single Port Serial Driver这个选项的,这是我根据项目需要添加的,并希望编译到内核中去,所以我这里是需要配置的,如何添加的详细过程,可以参考《如何将驱动或模块编译进内核》。 

选择Save及Load后,退出该界面,编译的准备工作就已经完成了。

 

可以看到提示信息,配置已经写入到.config文件了,执行make开始编译了。

这里我们需要切换到root用户来编译,在普通用户下make出现如下错误:

 

第三步:编译

切换root用户:sudo -s

sudo su 和 sudo -s都是切换到root用户,不同的是:

sudo su 环境用的是目标用户(root)的环境

sudo -s 环境用的是当前用户本身的环境

执行:make

因为第一次编译,所以需要等待漫长的编译......

编译完成。

 

第四步:编译生成image文件

make -j3 zImage

从上图可以看到,生成的zImage文件在arch/arm/boot目录下。

 

第5步:编译内核模块

make -j3 modules

 

第6步:安装内核模块到主机系统中

make modules_install

可以在主机系统中可以查看到内核模块安装到主机上了。

安装到主机上的作用是,我们在系统中开发的程序是需要在arm板子上运行的,编译的时候就需要对应板子的内核,也就是编译的时候指定对应内核的目录。

 

参考:

Build U-Boot and Linux Kernel from Source Code

https://developer.toradex.cn/knowledge-base/build-u-boot-and-linux-kernel-from-source-code#Kernel_Source

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值