Embedded Linux A-Z

Embedded Linux A-Z

    • About
    • Beaglebone Black
    • STM32MP157
  • Facebook
  • GitHub
  • LinkedIn

[Yocto-STM32MP1] 1. Build và flash core-image-minimal cho STM32MP157

  1. 1. Chuẩn bị bên máy host
  2. 2. Cấu hình môi trường build
    1. 1.1 Clone source poky, và meta-layer cần thiết
    2. 1.2 Sửa file bblayers.conf và local.conf
  3. 3. Flash thẻ nhớ với image build xong
    1. 3.1 Chuẩn bị thẻ nhớ
    2. 3.2 Tiến hành Flash

1. Chuẩn bị bên máy host

Ở đây máy mình cài Ubuntu 22.04.5 LTS (Jammy Jellyfish). Mình cài dual boot với windows để tối ưu core

Dựa theo hướng dẫn bên Yocto Project Reference Manual , mục 1.3.2.1. Ta cài các package sau

sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat cpio python3 python3-pip python3-pexpect \
libsdl1.2-dev xterm make xsltproc docbook-utils fop dblatex xmlto

2. Cấu hình môi trường build

1.1 Clone source poky, và meta-layer cần thiết

Đầu tiên ta clone source poky (reference distribution của Yocto project), với branch Scarthgap

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

Sau đó ta clone tiếp source code của meta-st-stm32mp là meta layer chuẩn từ hãng ST

git clone -b scarthgap https://github.com/STMicroelectronics/meta-st-stm32mp.git

1.2 Sửa file bblayers.conf và local.conf

Ta khởi tạo môi trường build

source poky/oe-init-build-env build-stm32mp1

Chúng ta đọc file README từ trong repo này, ST sẽ miêu tả chúng ta cần thêm các layer nào khi build (https://github.com/STMicroelectronics/meta-st-stm32mp/blob/scarthgap/README.md)

Do đó ta clone source và bổ sung thêm các layer này vào conf/bblayers.conf

git clone -b scarthgap git://git.openembedded.org/meta-openembedded
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
  /home/zk47/Learning/yocto-mp1/poky/meta \
  /home/zk47/Learning/yocto-mp1/poky/meta-poky \
  /home/zk47/Learning/yocto-mp1/poky/meta-yocto-bsp \
  /home/zk47/Learning/yocto-mp1/meta-openembedded/meta-oe \
  /home/zk47/Learning/yocto-mp1/meta-openembedded/meta-python \
  /home/zk47/Learning/yocto-mp1/meta-st-stm32mp \
  "

Ta kiểm tra tiếp file conf/machine/stm32mp1.conf trong layer để biết ta cần set machine là gì, sau đó ta sửa trong conf/local.conf

MACHINE = "stm32mp1"
# Configure xz (for low-end host machines with low RAM and lots of swap)
# XZ_DEFAULTS = "--memlimit=1500MiB"

Theo gợi ý từ guide của Digikey thì ta có thể bật “XZ_DEFAULTS = “–memlimit=1500MiB”” lên nếu máy host có dung lượng RAM ít, ở đây máy mình RAM và Swap khá nhiều nên mình sẽ comment dòng này đi

Okay, giờ ta tiến hành source thôi, mình sẽ chọn builddir là build-stm32mp1

Okay build thôi

bitbake core-image-minimal

3. Flash thẻ nhớ với image build xong

3.1 Chuẩn bị thẻ nhớ

Chúng ta cắm thẻ nhớ vào, và unmount các phân vùng hiện tại đi. Ta check bằng câu lệnh lsblk

mmcblk0     179:0    0  29,2G  0 disk 
├─mmcblk0p1 179:1    0   128M  0 part /media/zk47/boot
└─mmcblk0p2 179:2    0 132,4M  0 part /media/zk47/root

Ở đây thẻ nhớ mình cắm vào có 2 phân vùng như trên, có thể của bạn sẽ hiện sda1, hoăc sdb1 nhé. Các bạn tiến hành unmount

sudo umount /media/zk47/root
sudo umount /media/zk47/boot

3.2 Tiến hành Flash

Trước khi flash các bạn nên biết về flash layout của STM32 các bạn đọc thêm về cái này tại đây STM32MP1-Software-Platform_boot_BOOT

Cũng như xem video hướng dẫn của Digikey 11 phút đầu tiên nhé Introduction to Embedded Linux Part 3 – Flash SD Card and Boot Process | Digi-Key Electronics

Okay, xong khi đã xem xong, các bạn sẽ nắm được 1 cách cơ bản, còn đâu về Flash, bạn theo dõi guide từ Digikey sẽ bị cuốn vào fix partition mình nghĩ sẽ khó cho người mới

Về cơ bản ta sẽ có 1 số phân vùng như sau.

Ta dùng script sẵn của ST cung cấp để chia phân vùng, ta vào folder build-stm32mp1/tmp/deploy/images/stm32mp1

sudo ./scripts/create_sdcard_from_flashlayout.sh ./flashlayout_core-image-minimal/optee/FlashLayout_sdcard_stm32mp157d-dk1-optee.tsv

Tức là bạn chạy script, với 1 parameter là layout.tsv (ở đây mình chọn optee, các bạn chưa cần hiểu ngay nó khác nhau như nào, tạm thời là flash trước :vv )

Sau khi chạy xong, ta sẽ có chạy tiếp chính dòng in ra ở terminal sau câu “To put this raw image on sdcard:”

sudo dd if=/home/zk47/Youtube/Yocto/yocto-stm32mp1/build-stm32mp1/tmp/deploy/images/stm32mp1/flashlayout_core-image-minimal/optee/../../FlashLayout_sdcard_stm32mp157d-dk1-optee.raw of=/dev/mmcblk0 bs=8M conv=fdatasync status=progress

Các bạn tút thẻ nhớ ra cắm lại.

Okay giờ đã có phân vùng theo file tsv kia, trong file tsv này cũng đã gợi ý chúng ta file gì để vào đâu rồi, các bạn để ý 4 dòng cuối.

P	0x10	bootfs	System	mmc0	0x00984400	st-image-bootfs-poky-stm32mp1.bootfs.ext4
P	0x11	vendorfs	FileSystem	mmc0	0x04984400	st-image-vendorfs-poky-stm32mp1.vendorfs.ext4
P	0x12	rootfs	FileSystem	mmc0	0x05984400	core-image-minimal-stm32mp1.rootfs.ext4
P	0x13	userfs	FileSystem	mmc0	0x105984400	st-image-userfs-poky-stm32mp1.userfs.ext4

Đúng như gợi ý, ta copy những file này vào phân vùng, tuy nhiên chỉ cần rootfs, và bootfs để board khởi động lên thôi, nhớ unmount 2 phân vùng này trước

zk47@ltu:~/Youtube/Yocto/yocto-stm32mp1/build-stm32mp1/tmp/deploy/images/stm32mp1$ sudo dd if=core-image-minimal-stm32mp1.rootfs.ext4 of=/dev/mmcblk0p10 bs=1M status=progress
zk47@ltu:~/Youtube/Yocto/yocto-stm32mp1/build-stm32mp1/tmp/deploy/images/stm32mp1$ sudo dd if=st-image-bootfs-poky-stm32mp1.bootfs.ext4 of=/dev/mmcblk0p8 bs=1M status=progress
zk47@ltu:~/Youtube/Yocto/yocto-stm32mp1/build-stm32mp1/tmp/deploy/images/stm32mp1$ sync

Okay, các bạn tút thẻ nhớ và cắm lại vào board

Với STM32MP157, sau khi cắm st-link thì nó sẽ là ở tại /dev/ttyACM0 nhé

sudo picocom -b 115200 /dev/ttyACM0

Kết quả sẽ là đây

Poky (Yocto Project Reference Distro) 5.0.13 stm32mp1 /dev/ttySTM0
stm32mp1 login: root
WARNING: Poky is a reference Yocto Project distribution that should be used for
testing and development purposes only. It is recommended that you create your
own distribution for production use.

Ở bài tới mình sẽ hướng dẫn các bạn cách tạo patch Device Tree để enable I2C nhé

Rất mong nhận được sự ủng hộ, đóng góp từ các bạn !!

Chia sẻ:

  • Nhấp để chia sẻ trên X (Mở trong cửa sổ mới) X
  • Nhấn vào chia sẻ trên Facebook (Mở trong cửa sổ mới) Facebook
Thích Đang tải…
Trước đó

Bình luận về bài viết này Hủy trả lời

  • Facebook
  • GitHub
  • LinkedIn
 

Đang tải Bình luận...
 

    • Bình luận
    • Đăng lại
    • Theo dõi Đã theo dõi
      • Embedded Linux A-Z
      • Đã có tài khoản WordPress.com? Đăng nhập.
      • Embedded Linux A-Z
      • Theo dõi Đã theo dõi
      • Đăng ký
      • Đăng nhập
      • URL rút gọn
      • Báo cáo nội dung
      • Xem toàn bộ bài viết
      • Quản lý theo dõi
      • Ẩn menu
    %d