BeagleBone Black using Yocto === 書上([精通嵌入式Linux程式設計](https://www.books.com.tw/products/0010841433)),前幾章節講解如何自主建立(roll your own, RYO),從第6章節開始講解利用組建工具建立系統。 本文章主要紀錄我學習基本建置Yocto的筆記。 --- ## 建置環境: * HOST: ubuntu 20.04 LTS x64 * Yocto: poky * Board: BeagleBone Black * Meta: meta(不用自己載), meta-poky(不用自己載), meta-yocto-bsp(不用自己載), meta-arm, meta-arm-toolchain, meta-oe, meta-ti, meta-python --- 1. 下載yocto: ```bash= git clone git://git.yoctoproject.org/poky.git cd poky ``` 2. 下載資料包: * TI官方驅動 ```bash= git clone git://git.yoctoproject.org/meta-ti.git ``` * ARM官方驅動: ```bash= git clone git://git.yoctoproject.org/meta-arm.git ``` * OpenEmbedded ```bash= git clone https://github.com/openembedded/meta-openembedded ``` 2. 建立新的專案 ```bash= source oe-init-build-env new_project ``` 3. 設定yocto資料層,將加入剛剛載下來的資料 ```bash= vim conf/bblayers.conf ``` 修改成: ```text # POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf # changes incompatibly POKY_BBLAYERS_CONF_VERSION = "2" BBPATH = "${TOPDIR}" BBFILES ?= "" BBLAYERS ?= " \ PATH/poky/meta \ PATH/meta-poky \ PATH/meta-yocto-bsp \ PATH/meta-arm/meta-arm \ PATH/meta-arm/meta-arm-toolchain \ PATH/meta-openembedded/meta-oe \ PATH/meta-ti \ PATH/meta-openembedded/meta-python \ " ``` :::info PATH 請修改成自己實際的路徑 ::: 4. 修改設定檔: ```bash= vim conf/local.conf ``` 解開註解 ```bash= MACHINE ?= "beaglebone-yocto" ``` 加上註解 ```bash= # MACHINE ??= "qemux86-64" ``` 解開註解 ```bash= DL_DIR ?= "${TOPDIR}/downloads" SSTATE_DIR ?= "${TOPDIR}/sstate-cache" TMPDIR = "${TOPDIR}/tmp" ``` 新增package的封裝方式: ```bash= PACKAGE_CLASSES ?= "package_rpm" 改成 PACKAGE_CLASSES ?= "package_rpm package_ipk" ``` 應用python,在檔案尾端加入 ```text= IMAGE_INSTALL_append = " python3" IMAGE_INSTALL_append = " python3-pip" ``` 5. 確認資料層 ```bash bitbake-layers show-layers ``` ```bash= NOTE: Starting bitbake server... layer path priority ========================================================================== meta PATH/poky/meta 5 meta-poky PATH/poky/meta-poky 5 meta-yocto-bsp PATH/poky/meta-yocto-bsp 5 meta-arm PATH/poky/meta-arm/meta-arm 5 meta-arm-toolchain PATH/poky/meta-arm/meta-arm-toolchain 5 meta-oe PATH/poky/meta-openembedded/meta-oe 6 meta-ti PATH/poky/meta-ti 6 meta-python PATH/poky/meta-openembedded/meta-python 7 ``` :::info priority高的可以覆蓋低的 ::: 6. 最小化編譯 ```bash= bitbake core-image-minimal ``` :::info 會很久(4~5小時),可以先去做別的事情 ::: ```bash= Loading cache: 100% | | ETA: --:--:-- Loaded 0 entries from dependency cache. Parsing recipes: 100% |########################################################################################################################################################################| Time: 0:00:50 Parsing of 2349 .bb files complete (0 cached, 2349 parsed). 3631 targets, 347 skipped, 0 masked, 0 errors. NOTE: Resolving any missing task queue dependencies Build Configuration: BB_VERSION = "1.51.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "ubuntu-20.04" TARGET_SYS = "arm-poky-linux-gnueabi" MACHINE = "beaglebone-yocto" DISTRO = "poky" DISTRO_VERSION = "3.3+snapshot-bb490c7ea9170fc1b3c2dd15466daf6a9fad735c" TUNE_FEATURES = "arm vfp cortexa8 neon callconvention-hard" TARGET_FPU = "hard" meta meta-poky meta-yocto-bsp = "master:bb490c7ea9170fc1b3c2dd15466daf6a9fad735c" meta-arm meta-arm-toolchain = "master:4c3c2fda93af4900887f222d57a5af709dda5f20" meta-oe = "master:3c259f977e8647ac9c54097d0faab70719a5553e" meta-ti = "master:30335d90a1802f262017dea1ebae5b722a4b2a48" meta-python = "master:3c259f977e8647ac9c54097d0faab70719a5553e" ``` 7. 將編譯好的映像檔複製到記憶卡 ```bash sudo dd if=tmp/deploy/images/beaglebone-yocto/core-image-minimal-beaglebone-yocto.wic of=/dev/sdc ``` :::info * 這個例子中,我的記憶卡在/dev/sdc * 請刪除記憶卡所有分割區 ::: 8. 將記憶卡插入開發版,並依照以下方式開機 ![](https://i.imgur.com/HJmEoGg.png) ![](https://i.imgur.com/fLSW1jc.png) 1. TTL to USB連接至TXD, RXD, GND和PC 2. 按住User/Boot按紐(不要放) 3. 插入Power jack 4. 直到PC端Console軟體出現u-boot的開機log,放開User/Boot按紐 :::info 預設BeagleBone Black從內建emmc開機。這些步驟可讓開發版從sd card開機 ::: :::info 預設登入帳號為root ::: 9. 登入後輸入python3,即可看到python3互動式命令列 ```bash= python3 ``` 10. 登入自動啟動python3 (options) 修改passwd檔案 ```bash= vi /etc/passwd ``` ```bash= 將 root::0:0:root:/home/root:/bin/sh 修改成 root::0:0:root:/home/root:/usr/bin/python3 ``` ![](https://i.imgur.com/8sXlfH0.png)