查看: 42|回复: 0

[经验] 飞凌嵌入式ElfBoard ELF1板卡-内核编译之初次编译

[复制链接]

该用户从未签到

发表于 昨天 09:25 | 显示全部楼层 |阅读模式
分享到:
接下来我们就进行内核代码的初次编译,直接使用我们适配好的Linux内核源码进行编译。为了使编译操作更加简单,我们提供了编译脚本,将编译操作命令放进了脚本中执行,直接执行编译脚本文件build.sh即可完成代码的编译。我们先了解一下编译脚本的内容。使用vi命令打开build.sh脚本:
  1. elf@ubuntu:~/work/linux-4.1.15-elf1$ vi build.sh
复制代码
build.sh脚本内容如下:
  1. #!/bin/bash

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

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

  4. make distclean

  5. make imx6ull_elf1_defconfig

  6. make -j${CPUS}



  7. rm -rf ./.tmp

  8. make modules_install INSTALL_MOD_PATH=./.tmp/rootfs/

  9. cd .tmp/rootfs/

  10. 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。
整体编译内核
  1. 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编译脚本进行全部编译就不太合适了,就需要更改此脚本或者单步编译。
设置交叉编译环境
注意:
设置环境变量之后,只要不更换终端,下次再编译就不需要重新设置。
如果重新打开新终端或者切换账户,编译前需要重新设置环境变量。
设置编译环境主要是指定目标架构和交叉编译工具链,以及编译过程中使用到的一些库的路径等,使用如下命令配置(.后边有空格):
  1. . /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,然后使用图形界面进行配置,执行命令:
  1. elf@ubuntu:~/work/linux-4.1.15-elf1$ make menuconfig
复制代码
3-1.png
此图形界面所呈现的配置选项的菜单列表来源于Kconfig文件(下面章节会讲到),这些配置选择,就是根据.config读取出来的,我们也可以通过配置选项进行配置:
(1)Y(将该功能编译进内核);
(2)N(不将该功能编译进内核);
(3)M(将该功能编译成可以在需要时动态插入到内核中的模块);
三种选择根据实际需求进行配置,最后在保存退出的时候,会把最新的配置更新到.config中,此时可以把.config文件中配置复制到imx6ull_elf1_defconfig默认配置文件,否则在下次编译前在执行make distclean的时候会把最新的.config清除掉,我们还需要重新配置。
单独编译内核镜像zImage
  1. elf@ubuntu:~/work/linux-4.1.15-elf1$ make zImage -j4
复制代码
单独编译设备树
  1. elf@ubuntu:~/work/linux-4.1.15-elf1$ make dtbs –j4
复制代码
单独编译模块
  1. elf@ubuntu:~/work/linux-4.1.15-elf1$ make modules -j4
复制代码
安装模块到./.tmp/rootfs/文件夹中
  1. elf@ubuntu:~/work/linux-4.1.15-elf1$ make modules_install INSTALL_MOD_PATH=./.tmp/rootfs/
复制代码
打包模块
  1. elf@ubuntu:~/work/linux-4.1.15-elf1$ cd .tmp/rootfs/

  2. elf@ubuntu:~/work/linux-4.1.15-elf1$ tar -jcvf modules.tar.bz2 *
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条



手机版|小黑屋|与非网

GMT+8, 2024-12-18 20:39 , Processed in 0.110135 second(s), 16 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.