您好,登錄后才能下訂單哦!
beaglebone AI環境搭建與運行是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
本文主要介紹beaglebone的開發過程與啟動方式。同時將一套嵌入式Linux開發環境搭建起來。以便于更好的掌握和理解beaglebone AI的使用。工欲善其事,必先利其器,搭建好完整的開發環境,后續的工作才能更好的開展起來。要想用好一款芯片,也需要很好的理解其啟動方式。下面來實際的展示操作流程。
首先我選擇beaglebone AI作為嵌入式Linux學習的開發板,是因為有著良好的芯片datasheet支持,以及TI芯片的大規模的使用,使得其通用性和擴展性更強。板子顏值高,性能強、可玩性好、可以DIY的工程很多。這些都讓我對這個板子有著推進下去的動力,在不斷挖坑與填坑的過程中,也會將其作為我除了樹莓派4之外另一個主要業余推進的開發學習項目。在國內,這款板子并不是很熱門,但是在國外,玩的人還是很多,我也希望有更多的人一起去玩,從而學習更好的設計,寫出更多的更好的文章和大家分享。
當前的開發環境搭建在ubuntu上,首先連接開發板的debug串口。
正面的圖示如下所示:
該輸出作為debug串口使用。
首先確保默認的pc機是64位,不適合32位機器的使用。
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
是默認設定的路徑。
然后檢測一下gcc的版本
${CC}gcc --version
可以看到下面的結果
然后就可以開始進行uboot的編譯了。
git clone -b v2019.07-rc4 https://github.com/u-boot/u-boot --depth=1
cd u-boot/
然后為uboot生成補丁文件
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
接著開始編譯
make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} am57xx_evm_defconfig
make ARCH=arm CROSS_COMPILE=${CC}
編譯完成就可以進行下面的操作了。
學習一款嵌入式開發板的使用,首先就要理解其啟動模式。
按照https://github.com/beagleboard/beaglebone-ai/BeagleBone-AI_sch.pdf
上標注,可以知道,在啟動上,首先會從USB中尋找程序,然后第二啟動項是SD卡,接著是eMMC。
本文主要介紹SD卡與eMMC的啟動模式。并且將uboot燒錄到SD卡中進行啟動。
首先準備一張小于等于16GB的SD卡(實測32GB的卡插入沒用),接著插入Ubuntu系統中。
輸入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
可以看的標識是sdc,則我們可以通過下面的命令導出到全局變量。
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已經正常啟動了。
從上面的過程不難分析,一般的TI芯片都會將啟動分為三部分
ROM->MLO(SPL)->uboot.img
git clone https://github.com/RobertCNelson/ti-linux-kernel-dev.git
cd ti-linux-kernel-dev/
如果是編譯正常的內核
git checkout origin/ti-linux-4.14.y -b tmp
編譯實時性內核
git checkout origin/ti-linux-rt-4.14.y -b tmp
其中實時性內核是就是RT_LINUX。輸入下面的命令開始編譯。
./build_kernel.sh
中途會有個menuconfig的界面需要配置
直接選擇Exit即可,程序會繼續編譯下去。直到編譯結束。
跟文件系統可以選擇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
可以校驗一下
sha256sum debian-10.4-minimal-armhf-2020-05-10.tar.xz
得到結果如下即可
接著解壓
tar xf debian-10.4-minimal-armhf-2020-05-10.tar.xz
解壓后進入目錄可以看到下面的文件
其中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
校驗一下
sha256sum ubuntu-20.04-minimal-armhf-2020-05-10.tar.xz
校驗的結果如下:
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
即可。
接下來燒錄Linux的鏡像到SD卡中。
首先和燒錄uboot的方式一樣,如果檢測到sd卡的號為sdc。
export DISK=/dev/sdc
如果是mmcblk0則修改成該名稱。
輸入下面的命令查看sfdisk的版本。
sudo sfdisk --version
看到輸出
sfdisk,來自 util-linux 2.34
如果檢測到sfdisk >= 2.26.x
則輸入:
sudo sfdisk ${DISK} <<-__EOF__
4M,,L,*
__EOF__
如果檢測到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
掛載分區
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/
為了可以進行內核版本的區分,我們可以為內核鏡像定義一個名字,該名字可以查看編譯出來的文件得到4.14.108-ti-r137.zImage
。
export kernel_version=4.14.108-ti-r137
Linux完全引導起來需要rootfs,所以可以將rootfs解壓到指定的路徑下:
sudo tar xfvp ./*-*-*-armhf-*/armhf-rootfs-*.tar -C /media/rootfs/
sync
sudo chown root:root /media/rootfs/
sudo chmod 755 /media/rootfs/
為了方便,此時我們可以重名了內核版本,在/boot/uEnv.txt
文件中。
sudo sh -c "echo 'uname_r=${kernel_version}' >> /media/rootfs/boot/uEnv.txt"
接著輸入文件系統掛載
sudo sh -c "echo '/dev/mmcblk0p1 / auto errors=remount-ro 0 1' >> /media/rootfs/etc/fstab"
進入到剛才編譯ti-linux-kernel-dev
的上層目錄,輸入
sudo cp -v ./ti-linux-kernel-dev/deploy/*.zImage /media/rootfs/boot/vmlinuz-${kernel_version}
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}/
sudo tar xfv ./ti-linux-kernel-dev/deploy/${kernel_version}-modules.tar.gz -C /media/rootfs/
上述過程完成后,可以移除SD卡,并插入beaglebone AI的板子中。
sync
sudo umount /media/rootfs
上電后,首先會從SD卡中啟動,最后的效果如下:
由于燒錄了ubuntu系統,可以看到啟動信息。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。