本文轉(zhuǎn)載自:coldnew's blog
在 zybo board 開發(fā)記錄: Zynq 與 LED 閃爍控制 一文中我們談到了如何透過 C 語言撰寫?yīng)毩⒌某绦颍屗刂?Zynq 的處理器系統(tǒng) (Processing System, PS) 去閃爍 LED 的亮暗。既然 Zynq 的處理器系統(tǒng) (Processing System, PS) 使用的是 ARM Cortex-A9 的處理器,那當(dāng)然也可以讓我們跑 Linux 在 Zybo Board 上。
本文將簡(jiǎn)述如何自行編譯 u-boot 以及 Linux Kernel,并搭配 Busybox 制作簡(jiǎn)單的 RootFS 執(zhí)行于 Zybo Board 上。
開發(fā)目標(biāo)
在這次的開發(fā)中,我們要編譯 u-boot、Linux,并使用 Busybox 制作簡(jiǎn)單的 Rootfs 后,透過制作 SD 卡來讓 Zybo Board 透過 SD 卡開機(jī)。
要注意到的是,由于我們要透過 SD 卡開機(jī)進(jìn)入到 Linux 系統(tǒng),因此我們要透過 JP5 去更改開機(jī)模式。
了解開機(jī)流程
既然我們要讓 Zybo board 執(zhí)行 Linux 系統(tǒng),就要先來了解一下開機(jī)流程,才知道我們大概需要準(zhǔn)備哪些東西。從Zynq-7000 All Programmable SoC: Embedded Design Tutorial - A Hands-On Guide to Effective Embedded System Design (UG1165) 可以看到 Zynq-7000 執(zhí)行 Linux 系統(tǒng)的開機(jī)流程圖。
也就是說,當(dāng)開始提供電源給 Zynq 處理器系統(tǒng) (Processing System, PS) 并完成重置(reset) 后,Zynq 內(nèi)建的 Boot ROM 會(huì)去加載 第一階段開機(jī)程序 (First Stage Boot Loader, FSBL) ,接著加載 比特流 (bitstream) 去初始化整個(gè) 可程序邏輯(Programmable Logic, PL) 。 完成后,接下來就是透過 U-Boot 去加載 Linux Kernel、Device Tree 以及 Root File System。
了解了這個(gè),我們就知道我們大概要準(zhǔn)備哪些東西了。
設(shè)定好環(huán)境
在安裝玩 Vivado 與 Xilinx SDK 后,實(shí)際上包含 Zynq 在用的 ARM toolchain 亦同時(shí)被安裝到系統(tǒng)中,我們只要使用 source 命令即可讓當(dāng)前的環(huán)境知道 xilinx-arm toolchain 的路徑。這邊以 Viavdo 2016.2 作為范例。
coldnew@gentoo ~ $ source /opt/Xilinx/Vivado/2016.2/settings64.sh
這樣就可以獲得 arm-xilinx-* toolchain 的命令,實(shí)際上有哪些呢? 輸入個(gè) arm-xilinx- 按下 TAB 看看
如果你系統(tǒng)上已經(jīng)有其他的 ARM toolchain 的話,可以考慮跳過這一步驟,接下來要格式化 Micro SD 卡。
格式化 MicroSD 卡
在這次的開發(fā)中,我們要設(shè)定 MicroSD 卡片成兩個(gè)分區(qū),第一個(gè)是 fat32 格式,第二個(gè)則使用 ext4 格式,若不會(huì)使用 fdisk 命令的話,可以透過 gparted 來進(jìn)行格式化,以下是我格式化卡片的范例 (8GB 卡片)。
(實(shí)際上在本文的范例中,只會(huì)用到第一個(gè)分區(qū),第二個(gè)分區(qū)是為了往后文章要開機(jī)到大一點(diǎn)的 rootfs 準(zhǔn)備的。)
編譯 u-boot
我們首先去 GitHub 下載 DigilentInc 加入 zybo board 后的 u-boot 版本,要注意這邊要選擇 master-next 分支。
git clone https://github.com/DigilentInc/u-boot-Digilent-Dev.git -b master-next
完成后進(jìn)入到該文件夾
coldnew@gentoo ~ $ cd u-boot-Digilent-Dev
編譯 u-boot,記得指派編譯目標(biāo)為 zynq_zybo_config
coldnew@gentoo ~/u-boot-Digilent-Dev $ CROSS_COMPILE=arm-xilinx-linux-gnueabi- make zynq_zybo_config
coldnew@gentoo ~/u-boot-Digilent-Dev $ CROSS_COMPILE=arm-xilinx-linux-gnueabi- make
編譯完成后,注意一下 u-boot 這個(gè)檔案,他就是我們等等要用到的 u-boot 執(zhí)行檔,不過由于 Xilinx Tool 要找有 .elf 擴(kuò)展名的檔案,因此我們把它復(fù)制成 u-boot.elf 。
coldnew@gentoo ~/u-boot-Digilent-Dev $ cp u-boot u-boot.elf
編譯 Linux kernel
編譯好 u-boot 后,接下來就是編譯 Linux Kernel 了,我們一樣選擇 DigilentInc 加入 zybo board 后的 Linux Kernel 版本,記得要選 master-next 分支。
git clone https://github.com/DigilentInc/Linux-Digilent-Dev.git -b master-next
接著,當(dāng)然就是編譯了,不過在這之前請(qǐng)先確定你有裝 u-boot-tools 這套件,我們需要里面的 mkimage 指令,Gentoo Linux 可以直接用以下命令來安裝。
coldnew@gentoo ~ $ sudo emerge dev-embedded/u-boot-tools
完成后進(jìn)入 Linux Kernel 文件夾
coldnew@gentoo ~ $ cd Linux-Digilent-Dev
評(píng)論
查看更多