加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
    • 整體編譯內(nèi)核
    • 單獨(dú)編譯內(nèi)核
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

飛凌嵌入式ElfBoard ELF 1板卡-內(nèi)核編譯之初次編譯

12/17 09:30
123
閱讀需 8 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

接下來(lái)我們就進(jìn)行內(nèi)核代碼的初次編譯,直接使用我們適配好的Linux內(nèi)核源碼進(jìn)行編譯。為了使編譯操作更加簡(jiǎn)單,我們提供了編譯腳本,將編譯操作命令放進(jìn)了腳本中執(zhí)行,直接執(zhí)行編譯腳本文件build.sh即可完成代碼的編譯。我們先了解一下編譯腳本的內(nèi)容。使用vi命令打開(kāi)build.sh腳本:

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

build.sh腳本內(nèi)容如下:

#!/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行,獲取到當(dāng)前Ubuntu虛擬機(jī)CPU的核心數(shù)量,并賦值給變量CPUS;

第3行,執(zhí)行環(huán)境變量,使用arm的gcc工具編譯當(dāng)前內(nèi)核。注意:在腳本當(dāng)中執(zhí)行的環(huán)境變量只在當(dāng)前腳本內(nèi)生效,單獨(dú)編譯鏡像時(shí)仍需要執(zhí)行環(huán)境變量;

第4行,編譯前清理工程;

第5行,使用imx6ull_elf1_defconfig配置當(dāng)前工程,執(zhí)行后在當(dāng)前路徑下生成.config文件;

第6行,執(zhí)行”make”,編譯Linux源碼,后面的”-j${CPUS}”為使用當(dāng)前虛擬機(jī)的所有核心一起編譯;

第8-11行,編譯生成的.ko模塊使用make modules_install命令安裝到./.tmp/rootfs/目錄下,并壓縮打包,生成modules.tar.bz2。?

整體編譯內(nèi)核

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

編譯完成之后,會(huì)在arch/arm/boot/目錄下生成zImage文件,就是內(nèi)核鏡像文件;在arch/arm/boot/dts/下生成多個(gè).dtb設(shè)備樹(shù)二進(jìn)制文件;以及在某些驅(qū)動(dòng)目錄下生成.ko模塊。編譯完成后,生成的文件以及路徑會(huì)在下篇文章進(jìn)行說(shuō)明。

單獨(dú)編譯內(nèi)核

在調(diào)試過(guò)程中我們會(huì)經(jīng)常需要更改內(nèi)核配置或者單獨(dú)編譯zImage、dtb、ko模塊,那么直接執(zhí)行上面build.sh編譯腳本進(jìn)行全部編譯就不太合適了,就需要更改此腳本或者單步編譯。

設(shè)置交叉編譯環(huán)境

注意:

  • 設(shè)置環(huán)境變量之后,只要不更換終端,下次再編譯就不需要重新設(shè)置。
  • 如果重新打開(kāi)新終端或者切換賬戶,編譯前需要重新設(shè)置環(huán)境變量。

設(shè)置編譯環(huán)境主要是指定目標(biāo)架構(gòu)和交叉編譯工具鏈,以及編譯過(guò)程中使用到的一些庫(kù)的路徑等,使用如下命令配置(.后邊有空格):

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

更改內(nèi)核配置

Linux內(nèi)核編譯之前需要進(jìn)行配置,腳本中已經(jīng)有默認(rèn)的配置。往往我們需要根據(jù)自己的需求進(jìn)行內(nèi)核配置,接下來(lái)我們看一下如何進(jìn)行內(nèi)核配置的更改。更改內(nèi)核配置就是根據(jù)自己的需要,將內(nèi)核中的驅(qū)動(dòng)、軟件包、組件等功能模塊進(jìn)行裁剪或者添加??墒褂胢ake menuconfig命令生成圖形界面進(jìn)行修改。如果想要對(duì)內(nèi)核進(jìn)行重新配置,就需要先執(zhí)行,make imx6ull_elf1_defconfig命令生成.config,然后使用圖形界面進(jìn)行配置,執(zhí)行命令:

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

此圖形界面所呈現(xiàn)的配置選項(xiàng)的菜單列表來(lái)源于Kconfig文件(下面章節(jié)會(huì)講到),這些配置選擇,就是根據(jù).config讀取出來(lái)的,我們也可以通過(guò)配置選項(xiàng)進(jìn)行配置:

(1)Y(將該功能編譯進(jìn)內(nèi)核);

(2)N(不將該功能編譯進(jìn)內(nèi)核);

(3)M(將該功能編譯成可以在需要時(shí)動(dòng)態(tài)插入到內(nèi)核中的模塊);

三種選擇根據(jù)實(shí)際需求進(jìn)行配置,最后在保存退出的時(shí)候,會(huì)把最新的配置更新到.config中,此時(shí)可以把.config文件中配置復(fù)制到imx6ull_elf1_defconfig默認(rèn)配置文件,否則在下次編譯前在執(zhí)行make distclean的時(shí)候會(huì)把最新的.config清除掉,我們還需要重新配置。

單獨(dú)編譯內(nèi)核鏡像zImage

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

單獨(dú)編譯設(shè)備樹(shù)

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

單獨(dú)編譯模塊

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 *

相關(guān)推薦

電子產(chǎn)業(yè)圖譜