加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • 整体编译内核
    • 单独编译内核
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

飞凌嵌入式ElfBoard ELF 1板卡-内核编译之初次编译

12/17 09:30
61
阅读需 8 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

接下来我们就进行内核代码的初次编译,直接使用我们适配好的Linux内核源码进行编译。为了使编译操作更加简单,我们提供了编译脚本,将编译操作命令放进了脚本中执行,直接执行编译脚本文件build.sh即可完成代码的编译。我们先了解一下编译脚本的内容。使用vi命令打开build.sh脚本:

elf@ubuntu:~/work/linux-4.1.15-elf1$ vi build.sh

build.sh脚本内容如下:

#!/bin/bash

export CPUS=`grep -c processor /proc/cpuinfo`

source /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

make distclean

make imx6ull_elf1_defconfig

make -j${CPUS}




rm -rf ./.tmp

make modules_install INSTALL_MOD_PATH=./.tmp/rootfs/

cd .tmp/rootfs/

tar -jcvf modules.tar.bz2 * 

第2行,获取到当前Ubuntu虚拟机CPU的核心数量,并赋值给变量CPUS;

第3行,执行环境变量,使用arm的gcc工具编译当前内核。注意:在脚本当中执行的环境变量只在当前脚本内生效,单独编译镜像时仍需要执行环境变量;

第4行,编译前清理工程;

第5行,使用imx6ull_elf1_defconfig配置当前工程,执行后在当前路径下生成.config文件;

第6行,执行”make”,编译Linux源码,后面的”-j${CPUS}”为使用当前虚拟机的所有核心一起编译;

第8-11行,编译生成的.ko模块使用make modules_install命令安装到./.tmp/rootfs/目录下,并压缩打包,生成modules.tar.bz2。 

整体编译内核

elf@ubuntu:~/work/linux-4.1.15-elf1$ ./build.sh

编译完成之后,会在arch/arm/boot/目录下生成zImage文件,就是内核镜像文件;在arch/arm/boot/dts/下生成多个.dtb设备树二进制文件;以及在某些驱动目录下生成.ko模块。编译完成后,生成的文件以及路径会在下篇文章进行说明。

单独编译内核

在调试过程中我们会经常需要更改内核配置或者单独编译zImage、dtb、ko模块,那么直接执行上面build.sh编译脚本进行全部编译就不太合适了,就需要更改此脚本或者单步编译。

设置交叉编译环境

注意:

  • 设置环境变量之后,只要不更换终端,下次再编译就不需要重新设置。
  • 如果重新打开新终端或者切换账户,编译前需要重新设置环境变量。

设置编译环境主要是指定目标架构和交叉编译工具链,以及编译过程中使用到的一些库的路径等,使用如下命令配置(.后边有空格):

. /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi

更改内核配置

Linux内核编译之前需要进行配置,脚本中已经有默认的配置。往往我们需要根据自己的需求进行内核配置,接下来我们看一下如何进行内核配置的更改。更改内核配置就是根据自己的需要,将内核中的驱动、软件包、组件等功能模块进行裁剪或者添加。可使用make menuconfig命令生成图形界面进行修改。如果想要对内核进行重新配置,就需要先执行,make imx6ull_elf1_defconfig命令生成.config,然后使用图形界面进行配置,执行命令:

elf@ubuntu:~/work/linux-4.1.15-elf1$ make menuconfig

此图形界面所呈现的配置选项的菜单列表来源于Kconfig文件(下面章节会讲到),这些配置选择,就是根据.config读取出来的,我们也可以通过配置选项进行配置:

(1)Y(将该功能编译进内核);

(2)N(不将该功能编译进内核);

(3)M(将该功能编译成可以在需要时动态插入到内核中的模块);

三种选择根据实际需求进行配置,最后在保存退出的时候,会把最新的配置更新到.config中,此时可以把.config文件中配置复制到imx6ull_elf1_defconfig默认配置文件,否则在下次编译前在执行make distclean的时候会把最新的.config清除掉,我们还需要重新配置。

单独编译内核镜像zImage

elf@ubuntu:~/work/linux-4.1.15-elf1$ make zImage -j4

单独编译设备树

elf@ubuntu:~/work/linux-4.1.15-elf1$ make dtbs –j4

单独编译模块

elf@ubuntu:~/work/linux-4.1.15-elf1$ make modules -j4

安装模块到./.tmp/rootfs/文件夹中

elf@ubuntu:~/work/linux-4.1.15-elf1$ make modules_install INSTALL_MOD_PATH=./.tmp/rootfs/

打包模块

elf@ubuntu:~/work/linux-4.1.15-elf1$ cd .tmp/rootfs/

elf@ubuntu:~/work/linux-4.1.15-elf1$ tar -jcvf modules.tar.bz2 *

相关推荐

电子产业图谱