www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 嵌入式IoT


beaglebone AI環(huán)境搭建與運(yùn)行


  • 1.前言

  • 2.beaglebone AI 開(kāi)發(fā)板特性

  • 3.beaglebone AI開(kāi)發(fā)環(huán)境搭建

    • 3.1 硬件連接

    • 3.2 arm 交叉編譯工具鏈

    • 3.3 編譯uboot

  • 4.beaglebone AI啟動(dòng)方式

  • 5.beaglebone AI的Linux編譯

    • 5.1 編譯kernel

    • 5.2 選擇根文件系統(tǒng)

  • 6.將Linux的鏡像燒錄

    • 6.1 格式化SD卡

    • 6.2 拷貝rootfs到SD卡中

    • 6.3 拷貝Linux內(nèi)核鏡像

    • 6.4 拷貝設(shè)備樹(shù)文件

    • 6.5 拷貝內(nèi)核模塊

  • 7.啟動(dòng)與驗(yàn)證

  • 8.總結(jié)


1.前言

本文主要介紹beaglebone的開(kāi)發(fā)過(guò)程與啟動(dòng)方式。同時(shí)將一套嵌入式Linux開(kāi)發(fā)環(huán)境搭建起來(lái)。以便于更好的掌握和理解beaglebone AI的使用。工欲善其事,必先利其器,搭建好完整的開(kāi)發(fā)環(huán)境,后續(xù)的工作才能更好的開(kāi)展起來(lái)。要想用好一款芯片,也需要很好的理解其啟動(dòng)方式。下面來(lái)實(shí)際的展示操作流程。

2.beaglebone AI 開(kāi)發(fā)板特性

首先我選擇beaglebone AI作為嵌入式Linux學(xué)習(xí)的開(kāi)發(fā)板,是因?yàn)橛兄己玫男酒琩atasheet支持,以及TI芯片的大規(guī)模的使用,使得其通用性和擴(kuò)展性更強(qiáng)。板子顏值高,性能強(qiáng)、可玩性好、可以DIY的工程很多。這些都讓我對(duì)這個(gè)板子有著推進(jìn)下去的動(dòng)力,在不斷挖坑與填坑的過(guò)程中,也會(huì)將其作為我除了樹(shù)莓派4之外另一個(gè)主要業(yè)余推進(jìn)的開(kāi)發(fā)學(xué)習(xí)項(xiàng)目。在國(guó)內(nèi),這款板子并不是很熱門(mén),但是在國(guó)外,玩的人還是很多,我也希望有更多的人一起去玩,從而學(xué)習(xí)更好的設(shè)計(jì),寫(xiě)出更多的更好的文章和大家分享。

3.beaglebone AI開(kāi)發(fā)環(huán)境搭建

3.1 硬件連接

當(dāng)前的開(kāi)發(fā)環(huán)境搭建在ubuntu上,首先連接開(kāi)發(fā)板的debug串口。


正面的圖示如下所示:


該輸出作為debug串口使用。

3.2 arm 交叉編譯工具鏈

首先確保默認(rèn)的pc機(jī)是64位,不適合32位機(jī)器的使用。

wget -c https://releases.linaro.org/components/toolchain/binaries/6.5-2018.12/arm-linux-gnueabihf/gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar.xz
tar xf gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar.xz export CC=`pwd`/gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-

其中pwd是默認(rèn)設(shè)定的路徑。

然后檢測(cè)一下gcc的版本

${CC}gcc --version

可以看到下面的結(jié)果


3.3 編譯uboot

然后就可以開(kāi)始進(jìn)行uboot的編譯了。

git clone -b v2019.07-rc4 https://github.com/u-boot/u-boot --depth=1 cd u-boot/

然后為uboot生成補(bǔ)丁文件

wget -c https://github.com/eewiki/u-boot-patches/raw/master/v2019.07-rc4/0001-am57xx_evm-fixes.patch
 
patch -p1 < 0001-am57xx_evm-fixes.patch

接著開(kāi)始編譯

make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} am57xx_evm_defconfig
make ARCH=arm CROSS_COMPILE=${CC} 

編譯完成就可以進(jìn)行下面的操作了。

4.beaglebone AI啟動(dòng)方式

學(xué)習(xí)一款嵌入式開(kāi)發(fā)板的使用,首先就要理解其啟動(dòng)模式。

按照https://github.com/beagleboard/beaglebone-ai/BeagleBone-AI_sch.pdf上標(biāo)注,可以知道,在啟動(dòng)上,首先會(huì)從USB中尋找程序,然后第二啟動(dòng)項(xiàng)是SD卡,接著是eMMC。

本文主要介紹SD卡與eMMC的啟動(dòng)模式。并且將uboot燒錄到SD卡中進(jìn)行啟動(dòng)。

首先準(zhǔn)備一張小于等于16GB的SD卡(實(shí)測(cè)32GB的卡插入沒(méi)用),接著插入U(xiǎn)buntu系統(tǒng)中。

輸入lsblk。

bigmagic@bigmagic:~/work$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop1    7:1    0  55.3M  1 loop /snap/core18/1885
loop2    7:2    0 162.9M  1 loop /snap/gnome-3-28-1804/145
loop3    7:3    0 217.9M  1 loop /snap/gnome-3-34-1804/60
loop4    7:4    0 255.6M  1 loop /snap/gnome-3-34-1804/36
loop5    7:5    0  62.1M  1 loop /snap/gtk-common-themes/1506
loop6    7:6    0  43.2M  1 loop /snap/snap-store/415
loop7    7:7    0  50.7M  1 loop /snap/snap-store/481
loop8    7:8    0    31M  1 loop /snap/snapd/9607
loop9    7:9    0    31M  1 loop /snap/snapd/9721
loop10   7:10   0  55.4M  1 loop /snap/core18/1932
sda      8:0    0 931.5G  0 disk
├─sda1   8:1    0 465.9G  0 part /
└─sda2   8:2    0 465.7G  0 part
sdb      8:16   0 223.6G  0 disk
├─sdb1   8:17   0   200M  0 part /boot/efi
├─sdb2   8:18   0  99.4G  0 part
├─sdb3   8:19   0   589M  0 part
├─sdb4   8:20   0 115.4G  0 part
└─sdb5   8:21   0     8G  0 part
sdc      8:32   1    15G  0 disk
└─sdc1   8:33   1    15G  0 part

可以看的標(biāo)識(shí)是sdc,則我們可以通過(guò)下面的命令導(dǎo)出到全局變量。

export DISK=/dev/sdc

輸入下面三條指令則可以將uboot燒錄到卡里了。

sudo dd if=/dev/zero of=${DISK} bs=1M count=10
sudo dd if=./u-boot/MLO of=${DISK} count=2 seek=1 bs=128k
sudo dd if=./u-boot/u-boot.img of=${DISK} count=4 seek=1 bs=384k

完成后輸入sync后,可以看到uboot已經(jīng)正常啟動(dòng)了。


從上面的過(guò)程不難分析,一般的TI芯片都會(huì)將啟動(dòng)分為三部分

ROM->MLO(SPL)->uboot.img

5.beaglebone AI的Linux編譯

5.1 編譯kernel

git clone https://github.com/RobertCNelson/ti-linux-kernel-dev.git cd ti-linux-kernel-dev/

如果是編譯正常的內(nèi)核

git checkout origin/ti-linux-4.14.y -b tmp

編譯實(shí)時(shí)性內(nèi)核

git checkout origin/ti-linux-rt-4.14.y -b tmp

其中實(shí)時(shí)性內(nèi)核是就是RT_LINUX。輸入下面的命令開(kāi)始編譯。

./build_kernel.sh

中途會(huì)有個(gè)menuconfig的界面需要配置


直接選擇Exit即可,程序會(huì)繼續(xù)編譯下去。直到編譯結(jié)束。

5.2 選擇根文件系統(tǒng)

跟文件系統(tǒng)可以選擇Debian 10或者Ubuntu 20.04 LTS

Debian 10

首先下載

wget -c https://rcn-ee.com/rootfs/eewiki/minfs/debian-10.4-minimal-armhf-2020-05-10.tar.xz

可以校驗(yàn)一下

sha256sum debian-10.4-minimal-armhf-2020-05-10.tar.xz

得到結(jié)果如下即可

接著解壓

tar xf debian-10.4-minimal-armhf-2020-05-10.tar.xz

解壓后進(jìn)入目錄可以看到下面的文件

其中user_password.list中存放的是用戶名和密碼。

debian:temppwd

Ubuntu 20.04 LTS

可以下載

wget -c https://rcn-ee.com/rootfs/eewiki/minfs/ubuntu-20.04-minimal-armhf-2020-05-10.tar.xz

校驗(yàn)一下

sha256sum ubuntu-20.04-minimal-armhf-2020-05-10.tar.xz

校驗(yàn)的結(jié)果如下:

de0177ac9259fdbcc626ee239f4258b64070c0921dbc38c45fab6925a5becaa1  ubuntu-20.04-minimal-armhf-2020-05-10.tar.xz

解壓即可

tar xf ubuntu-20.04-minimal-armhf-2020-05-10.tar.xz

在ubuntu上可以使用輸入用戶名Ubuntu,密碼temppwd即可。

6.將Linux的鏡像燒錄

接下來(lái)燒錄Linux的鏡像到SD卡中。

6.1 格式化SD卡

首先和燒錄uboot的方式一樣,如果檢測(cè)到sd卡的號(hào)為sdc。

export DISK=/dev/sdc

如果是mmcblk0則修改成該名稱。

輸入下面的命令查看sfdisk的版本。

sudo sfdisk --version

看到輸出

sfdisk,來(lái)自 util-linux 2.34

如果檢測(cè)到sfdisk >= 2.26.x則輸入:

sudo sfdisk ${DISK} <<-__EOF__
4M,,L,*
__EOF__

如果檢測(cè)到sfdisk <= 2.25.x則輸入:

sudo sfdisk --unit M ${DISK} <<-__EOF__
4,,L,*
__EOF__

然后格式化SD卡

for: DISK=/dev/mmcblkX
sudo mkfs.ext4 -L rootfs ${DISK}p1 for: DISK=/dev/sdX
sudo mkfs.ext4 -L rootfs ${DISK}1

掛載分區(qū)

sudo mkdir -p /media/rootfs/ for: DISK=/dev/mmcblkX
sudo mount ${DISK}p1 /media/rootfs/ for: DISK=/dev/sdX
sudo mount ${DISK}1 /media/rootfs/

6.2 拷貝rootfs到SD卡中

為了可以進(jìn)行內(nèi)核版本的區(qū)分,我們可以為內(nèi)核鏡像定義一個(gè)名字,該名字可以查看編譯出來(lái)的文件得到4.14.108-ti-r137.zImage。

export kernel_version=4.14.108-ti-r137

Linux完全引導(dǎo)起來(lái)需要rootfs,所以可以將rootfs解壓到指定的路徑下:

sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/
sync
sudo chown root:root /media/rootfs/
sudo chmod 755 /media/rootfs/

為了方便,此時(shí)我們可以重名了內(nèi)核版本,在/boot/uEnv.txt文件中。

sudo sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt" 

接著輸入文件系統(tǒng)掛載

sudo sh -c "echo '/dev/mmcblk0p1  /  auto  errors=remount-ro  0  1' >> /media/rootfs/etc/fstab" 

6.3 拷貝Linux內(nèi)核鏡像

進(jìn)入到剛才編譯ti-linux-kernel-dev的上層目錄,輸入

sudo cp -v ./ti-linux-kernel-dev/deploy/*.zImage /media/rootfs/boot/vmlinuz-${kernel_version} 

6.4 拷貝設(shè)備樹(shù)文件

sudo mkdir -p /media/rootfs/boot/dtbs/${kernel_version}/
sudo tar xfv ./ti-linux-kernel-dev/deploy/${kernel_version}-dtbs.tar.gz -C /media/rootfs/boot/dtbs/${kernel_version}/

6.5 拷貝內(nèi)核模塊

sudo tar xfv ./ti-linux-kernel-dev/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/

7.啟動(dòng)與驗(yàn)證

上述過(guò)程完成后,可以移除SD卡,并插入beaglebone AI的板子中。

sync
sudo umount /media/rootfs

上電后,首先會(huì)從SD卡中啟動(dòng),最后的效果如下:


由于燒錄了ubuntu系統(tǒng),可以看到啟動(dòng)信息。

8.總結(jié)

對(duì)于beaglebone的程序的編譯與燒錄SD卡,主要需要注意的是SD卡的大小不要大于16MB,官方推薦最好是8MB比較合適。編譯uboot,Linux kernel比較看起來(lái)比較麻煩,實(shí)際按照步驟操作下來(lái),也可以熟悉Linux的開(kāi)發(fā)流程。beaglebone官方提供了可以一鍵燒錄的模式,可以直接燒錄底層的鏡像,這種方式不適合Linux底層開(kāi)發(fā)學(xué)習(xí)。關(guān)于uboot、Linux kernel、rootfs的編譯,可以使用buildroot來(lái)構(gòu)建,后面會(huì)介紹這種更加方便的模式。但是底層的探索更加能夠了解和掌握工程的構(gòu)建與系統(tǒng)的執(zhí)行流程。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉