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

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

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

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

接下來我們就進行內(nèi)核代碼的初次編譯,直接使用我們適配好的Linux內(nèi)核源碼進行編譯。為了使編譯操作更加簡單,我們提供了編譯腳本,將編譯操作命令放進了腳本中執(zhí)行,直接執(zhí)行編譯腳本文件build.sh即可完成代碼的編譯。我們先了解一下編譯腳本的內(nèi)容。使用vi命令打開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虛擬機CPU的核心數(shù)量,并賦值給變量CPUS;

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

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

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

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

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

整體編譯內(nèi)核

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

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

單獨編譯內(nèi)核

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

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

注意:

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

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

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

更改內(nèi)核配置

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

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

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

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

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

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

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

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

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

單獨編譯設(shè)備樹

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 *

相關(guān)推薦

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