ซอฟต์แวร์ฝังตัว - Yocto สร้าง Raspberry Pi 4 ภาพหน้าจอของคอมพิวเตอร์

Yocto สร้าง Raspberry Pi 4

ในสภาพแวดล้อม Docker

Yocto ทํางานในคอนเทนเนอร์ docker

ใน เอกสาร yocto มีบท (2.2.2) สําหรับการตั้งค่า CROss PlatformS (CROPS) เป็นทางเลือกในการตั้งค่าพีซี linux ดั้งเดิม ทางเลือกนี้ใช้คอนเทนเนอร์ docker เพื่อสร้างอิมเมจระบบที่กําหนดเองเช่นสําหรับ Raspberry Pi

น่าเสียดายที่มีข้อผิดพลาดเล็กน้อยใน เอกสาร สําหรับการตั้งค่าสภาพแวดล้อมนี้สําหรับฉันบน Mac OS X (Monterey)

ติดตั้งคอนเทนเนอร์ docker สําหรับ Mac OS X

สําหรับการใช้ CROPS docker บน Linux, Windows และ Mac OS X มีการตั้งค่าพิเศษบางอย่างที่จําเป็น ก่อนตั้งค่าคอนเทนเนอร์สําหรับ Yocto คุณต้องสร้างโวลุ่ม docker เพื่อจัดเก็บผลลัพธ์ นอกจากนี้ยังมีภาชนะ docker samba ใช้เพื่อให้ไฟล์ใน Mac OS X

สร้างระดับเสียง docker

ในหน้าต่างเทอร์มินัลให้พิมพ์คําสั่งต่อไปนี้:

docker volume create --name raspberry
docker run -it --rm -v raspberry:/workdir busybox chown -R 1000:1000 /workdir

สร้างและเรียกใช้คอนเทนเนอร์แซมบ้า

OSX จะไม่อนุญาตให้คุณเชื่อมต่อกับส่วนแบ่งแซมบ้าที่ทํางานอยู่ในเครื่อง ดังนั้น ก่อนอื่นคุณต้องสร้างนามแฝงสําหรับ 127.0.0.1 จาก 127.0.0.2

sudo ifconfig lo0 127.0.0.2 alias up

จากนั้นสร้างคอนเทนเนอร์แซมบ้าที่ช่วยให้คุณเห็นไฟล์ในโวลุ่ม docker:

docker create -t --expose 445 -p 127.0.0.2:445:445 --name samba -v raspberry:/workdir crops/samba

เนื่องจากคุณจะต้องมีนามแฝงเพื่อเชื่อมต่อกับคอนเทนเนอร์แซมบ้าคุณสามารถรวมจุดเริ่มต้นของแซมบ้าและนามแฝงได้ดังนี้:

docker start samba && sudo ifconfig lo0 127.0.0.2 alias up

ตอนนี้คุณสามารถเปิด workdir ในเบราว์เซอร์ไฟล์ ในการค้นหากด "Command-K" และในช่องที่อยู่เซิร์ฟเวอร์พิมพ์ "smb://127.0.0.2/workdir" และคลิก "เชื่อมต่อ" ตอนนี้คุณควรเห็นเนื้อหาของระดับเสียง docker ในตัวค้นหา

สร้างและเริ่มคอนเทนเนอร์ Yocto

ในการสร้างและ/หรือเริ่มคอนเทนเนอร์ Yocto ให้พิมพ์ในหน้าต่างเทอร์มินัล:

docker run --rm -it --name=crops-poky -v raspberry:/workdir crops/poky:ubuntu-20.04 --workdir=/workdir

ตั้งค่าสภาพแวดล้อมการสร้างในคอนเทนเนอร์

เมื่อคอนเทนเนอร์ docker เริ่มทํางาน คุณมีพรอมต์เทอร์มินัลที่มีลักษณะดังนี้: "pokyuser@d4ddfe042587:/workdir"

ตอนนี้คุณสามารถตั้งค่าสภาพแวดล้อมการสร้าง

โคลนรุ่น poky

ในกรณีของฉันฉันใช้ Yocto เวอร์ชัน 3.4 ที่มีชื่อ "Honister" เนื่องจากเลเยอร์เมตาราสเบอร์รี่ไม่สามารถใช้ได้กับเวอร์ชัน poky ที่ใหม่กว่าในขณะนี้ เป็นครั้งแรกที่คุณต้องโคลนที่เก็บ poky:

git clone -b honister git://git.yoctoproject.org/poky poky-honister

หากคุณต้องการอัปเดต poky เป็นเวอร์ชันล่าสุด:

cd poky-honister
git pull --all --prune

เลเยอร์เมตาเพิ่มเติมสําหรับ Raspberry Pi

เปลี่ยนเป็น "poky-honister" และโคลนที่เก็บต่อไปนี้: meta-raspberry, meta-openembedded และหากจําเป็น meta-qt5

cd poky-honister
git clone -b honister git://git.yoctoproject.org/meta-raspberrypi
git clone -b honister git://git.openembedded.org/meta-openembedded
git clone -b honister https://github.com/meta-qt5/meta-qt5.git

ตั้งค่าสร้างการกําหนดค่า

ออกจากไดเร็กทอรี poky-honister เพื่อให้คุณอยู่ใน /workdir ตอนนี้แหล่งที่มาของสภาพแวดล้อมการสร้างด้วยสคริปต์ oe-init-build-env

cd ..
source poky-honister/oe-init-build-env rpi-build

ไดเร็กทอรีใหม่ "rpi-build" - คุณสามารถตั้งชื่อได้ตามที่คุณต้องการ - และไดเร็กทอรี conf ที่มีไฟล์ bblayers.conf, local.conf และ templateconf.cfg ถูกสร้างขึ้น

เนื่องจากไม่มีโปรแกรมแก้ไขข้อความติดตั้งในคอนเทนเนอร์ คุณจึงต้องแก้ไขไฟล์กําหนดค่าในโวลุ่ม samba ที่ติดตั้งใน Mac OS X หรือต้องติดตั้งโปรแกรมแก้ไขข้อความในคอนเทนเนอร์ ในการทําเช่นนี้คุณต้องเปิดหน้าต่างเทอร์มินัลที่สอง - ในขณะที่คอนเทนเนอร์ yocto กําลังทํางาน - และเริ่ม bash shell ในคอนเทนเนอร์ด้วยสิทธิ์รูท:

docker exec -it --user=root crops-poky bash
apt-get install nano
exit
จากนั้นคุณสามารถแก้ไขไฟล์กําหนดค่าในคอนเทนเนอร์ yocto เป็น pokyuser

โน้ต

ตัวแก้ไขไม่ได้ติดตั้งอย่างถาวร หลังจากออกจากคอนเทนเนอร์และเข้าอีกครั้งคุณต้องติดตั้งอีกครั้ง

#### ก่อนอื่นให้เพิ่ม meta-raspberry ในไฟล์ bblayers.conf
nano conf/bblayers.conf

เพิ่ม "/workdir/poky-honister/meta-raspberrypi " เพื่อให้ดูเหมือนว่า

BBLAYERS ?= " \
  /workdir/poky-honister/meta \
  /workdir/poky-honister/meta-poky \
  /workdir/poky-honister/meta-yocto-bsp \
  /workdir/poky-honister/meta-raspberrypi \
  "

และบันทึกไว้

แก้ไขครั้งที่สอง local.conf

แก้ไขไฟล์ local.conf:

nano conf/local.conf

เปลี่ยนบรรทัดต่อไปนี้:

-เครื่องจักร = "qemux86-64" -> เครื่อง?? = "ราสเบอร์รี่ PI4-64"

ขึ้นอยู่กับราสเบอร์รี่ที่คุณต้องการใช้ (raspberrypi0, raspberrypi0w, raspberrypi3, raspberrypi3-64, raspberrypi4, raspberrypi4-64 เป็นต้น)

ยกเลิกการแสดงความคิดเห็นในบรรทัดต่อไปนี้:

  • DL_DIR ?= "${TOPDIR}/ดาวน์โหลด"
  • SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
  • TMPDIR = "${TOPDIR}/tmp"

เพิ่มบรรทัดต่อไปนี้ในตอนท้ายเพื่อรับ sdimg เพื่อกะพริบไปยังการ์ด SD:

-- IMAGE_FSTYPES ="ext4.xz RPI - SDIG" -- SDIMG_ROOTFS_TYPE = "ext4.xz"

บันทึกไฟล์ local.conf

Bitbake ภาพแรก

ตอนนี้คุณมีการตั้งค่าขั้นต่ําในการสร้างภาพแรก:

bitbake -k core-image-minimal

ใน เอกสาร Yocto คุณจะพบคําอธิบายสั้น ๆ เกี่ยวกับคําอธิบายภาพที่มีอยู่

เช่น:

  • core-image-minimal: ภาพขนาดเล็กที่สามารถอนุญาตให้อุปกรณ์บูตได้
  • core-image-base: อิมเมจเฉพาะคอนโซลที่รองรับฮาร์ดแวร์อุปกรณ์เป้าหมายอย่างเต็มที่
  • core-image-full-cmdline: อิมเมจเฉพาะคอนโซลที่ติดตั้งฟังก์ชันการทํางานของระบบ Linux ที่มีคุณสมบัติครบถ้วนมากขึ้น

หลังจากในขณะที่ -- ซึ่งอาจเป็นชั่วโมง serveral เป็นครั้งแรก -- bitbake เสร็จสิ้นและคุณพบไฟล์ sdimg ในไดเรกทอรีต่อไปนี้ :

/workdir/rpi-build/tmp/deploy/images/raspberrypi4-64

การกําหนดค่าเพิ่มเติม

การกําหนดค่าฮาร์ดแวร์ราสเบอร์รี่พิเศษ

ในการตั้งค่าฮาร์ดแวร์เฉพาะคุณสามารถดู extra-apps.md และ extra-build-config.md ได้ คุณพบไฟล์นี้ยังอยู่ในไดเร็กทอรี meta-raspberrypi/docs

เลเยอร์เมตายังมีการกําหนดค่าภาพ "rpi-test-image" เพื่อใช้กับ bitbake ภาพจะขึ้นอยู่กับ "core-image-base" ซึ่งรวมถึงแพคเกจส่วนใหญ่ใน meta-raspberrypi และตัวอย่างสื่อบางส่วน

bitbake -k rpi-test-image

 

การกําหนดค่าซอฟต์แวร์พิเศษ

คุณอาจต้องติดตั้งแพคเกจซอฟต์แวร์เพิ่มเติมทั้งนี้ขึ้นอยู่กับการกําหนดค่าบิลด์อิมเมจที่คุณใช้อยู่

คุณสามารถทําได้โดยเพิ่มการตั้งค่าบางอย่างลงในไฟล์ local.conf

ตัวอย่างเช่นเพิ่มบรรทัดต่อไปนี้เพื่อตั้งค่า ssh-server, pi-user และ systemd:

## packages
IMAGE_INSTALL:append = " openssh-sftp-server sudo python3 python3-pip rpi-gpio raspi-gpio"
IMAGE_FEATURES:append = " ssh-server-openssh"

## systemd settings
DISTRO_FEATURES:append = " systemd"
VIRTUAL-RUNTIME:init_manager = "systemd"
VIRTUAL-RUNTIME:initscripts = ""
IMX_DEFAULT_DISTRO_FEATURES:append = " systemd"

หรือเพิ่มงูหลาม:

IMAGE_INSTALL:append = " python3 python3-pip rpi-gpio raspi-gpio"

โน้ต

ช่องว่างเริ่มต้นใน " python3 python3-pip rpi-gpio raspi-gpio" มีความสําคัญเนื่องจากข้อความถูกผนวกเข้ากับการกําหนดค่าที่มีอยู่และจําเป็นต้องแยกด้วยช่องว่างนี้

ใบอนุญาตลิขสิทธิ์

ลิขสิทธิ์ © 2022 Interelectronix e.K.
ซอร์สโค้ดของโครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต GPL-3.0

กิตติกรรมประกาศ

แหล่งข้อมูลที่ใช้ในการสร้างคําแนะนํานี้:

ขอบคุณทุก