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

Yocto สร้าง Raspberry Pi 4

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

คู่มือโครงการโอเพ่นซอร์ส Yocto

เคล็ดลับการตั้งค่า Linux แบบกําหนดเองบน Raspberry Pi ด้วย Docker

คู่มือโครงการโอเพ่นซอร์สสําหรับ Linux แบบกําหนดเองบน Raspberry Pi พร้อมเคล็ดลับการตั้งค่า Docker

ดําดิ่งสู่โครงการ Yocto สําหรับระบบ Linux แบบกําหนดเองบนฮาร์ดแวร์ใดก็ได้ เหมาะสําหรับนักพัฒนาและผู้ที่ชื่นชอบ ระบบฝังตัว เริ่มสร้างทันที!

สํารวจโครงการ Yocto ซึ่งเป็นความคิดริเริ่มแบบโอเพ่นซอร์สสําหรับการสร้างระบบ Linux แบบกําหนดเองสําหรับสถาปัตยกรรมฮาร์ดแวร์ใดๆ เรียนรู้วิธีใช้ CROPS สําหรับการพัฒนาข้ามแพลตฟอร์ม ตั้งค่าคอนเทนเนอร์ Docker และสร้างอิมเมจ Linux ที่ปรับให้เหมาะกับอุปกรณ์ฝังตัวและอุปกรณ์ IoT คู่มือของเราครอบคลุมการตั้งค่าบน macOS การกําหนดค่าสภาพแวดล้อมการสร้าง และการเพิ่มประสิทธิภาพสําหรับ Raspberry Pi ไม่ว่าคุณจะเป็นมือใหม่หรือผู้เชี่ยวชาญ ให้ค้นหาแนวทางปฏิบัติที่ดีที่สุด เครื่องมือ และการสนับสนุนจากชุมชนสําหรับความต้องการโครงการ Linux ของคุณ

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

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

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

ขอบคุณทุก