Z2PCBA@gmail.com +66-897725026
วิธีการติดตั้ง PetaLinux บน ZYNQ (ตอนที่ 2)
Thursday November 8th, 2018
0

วิธีการติดตั้ง PetaLinux บน ZYNQ

สำหรับวิธีการติดตั้ง PetaLinux บน ZYNQ นั้น ในบทความนี้เราจะเริ่มลงมือในขั้นต่อไปกันนะครับ โดยในบทความที่แล้วเราได้เริ่มต้นทำการ Build PS และทำการเตรียม SD-CARD โดยแบ่งพาร์ทิชันให้พร้อมสำหรับการลง PetaLinux กันไปแล้ว ในบทความนี้เราก็จะมาเริ่มต้นทำการดาวน์โหลดก็และทำการติดตั้ง PetaLinux กันนะครับ

Petalinux นั้นเป็น tool chain ของ Xilinx ที่เอาไว้สร้าง Linux kernel images, root fils system และ kernel module ซึ่ง Petalinux นั้นสามารถที่จะสร้าง U-Boot, First Stage Boot Loader(FSBL) และ BOOT.BIN กับ Design ที่เราได้ออกแบบไว้

เรามาเริ่มขั้นตอนการติดตั้งดังนี้ครับ

Install PetaLinux

ในการลง PetaLinux นั้นเราจะต้องไปทำการโหลดตัว Petalinux ให้ตรงกันกับเวอร์ชันของ Vivado ด้วยนะครับ ไม่งั้นอาจจะเกิดข้อผิดพลาดได้ โดยสามารถไปดาวน์โหลด PetaLinux ได้ที่ https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html (โดยในตัวอย่างนี้ทางผู้เขียนจะใช้ version 2017.4 นะครับ)

เมื่อเราทำการดาวน์โหลดตัวไฟล์สำหรับติดตั้ง PetaLinux เสร็จเรียบร้อยแล้ว เราจะต้องทำการสร้างโฟลเดอร์(folder) ที่จะใช้เป็นตำแหน่งในการติดตั้ง Petalinux ( โดยของผมในตัวอย่างนี้จะให้อยู่ในที่ โฟลเดอร์ /opt/petalinux )

sudo mkdir /opt/petalinux # สร้างโฟลเดอร์เพื่อเป็นตำแหน่งสำหรับติดตั้ง PetaLinux
สร้างโฟลเดอร์สำหรับ install PetaLinux
สร้างโฟลเดอร์สำหรับติดตั้ง PetaLinux

หลังจากที่สร้างโฟลเดอร์เสร็จ เราก็จะเริ่มขั้นตอนการติดตั้งกันได้เลย โดยให้เข้าไปยังตำแหน่งที่เก็บไฟล์สำหรับตัวติดตั้ง(install) ที่เราได้ดาวน์โหลดมาเก็บไว้แล้ว จากนั้นจึงรันคำสั่งสำหรับติดตั้งดังนี้ (โดยในตัวอย่างของผมเก็บไฟล์สำหรับติดตั้งไว้ที่ share folder นะครับซึ่งสามารถเรียกคำสั่งติดตั้งผ่าน ./ ได้เลย แล้วผมก็ต้องการติดตั้งโปรแกรมไว้ที่โฟลเดอร์ /opt/petalinux/ ครับ)

./petalinux-vxxx-final-installer.run /opt/petalinux/ # รันคำสั่งเพื่อติดตั้ง PetaLinux ไปยังโฟลเดอร์ที่สร้างเอาไว้
โฟลเดอร์ที่โปรแกรมถูกติดตั้งไว้
ทำการรันคำสั่งเพื่อติดตั้ง PetaLinux ลงไปในโฟลเดอร์ที่กำหนดไว้

ในระหว่างทำการทำการติดตั้ง(install) จะมีถามเกี่ยวกับเรื่องข้อตกลง(Agreement) ให้ “กด Q” เพื่อออก แล้ว “กด y” เพื่อตอบตกลง นะครับ

ซึ่งในขั้นตอนนี้ต้องระวังเรื่องสิทธิในการเข้าถึง(permission) ของโฟลเดอร์ในโฟลเดอร์ /opt ด้วยนะครับ ถ้าติดปัญหาใดๆที่เกี่ยวข้องกับสิทธิในการเข้าถึง(permission) เราจำเป็นต้องแก้ไขก่อน การแก้ไขนั้นมีหลายวิธีเราอาจจะต้องเลือกใช้ตามความเหมาะสมครับ ตัวอย่างเช่น

  • อาจจะทำได้โดยการปรับเปลี่ยนสิทธิในการเข้าถึงโฟลเดอร์นั้นๆ ให้เหมาะกับผู้ใช้งานแต่ละประเภทด้วยคำสั่ง chmod
  • หรือ อาจจะไปเปลี่ยนแค่เจ้าของ(ownership)ของโฟลเดอร์นั้นโดยกำหนดให้ user เราเองที่เรากำลังใช้งานอยู่เป็นเจ้าของโฟลเดอร์นั้นเองด้วยคำสั่ง chown ซึ่งจะทำให้ user ของเรามีสิทธิในการดำเนินการกับโฟลเดอร์ดังกล่าวมากขึ้น

โดยในกรณีของผมจะใช้การเปลี่ยนเจ้าของ(group/owner) ของโฟลเดอร์ให้เป็น user ของเรานะครับ ด้วยคำสั่ง chown ซึ่งมีโครงสร้างคำสั่งดังนี้ chown <owner_name>:<group_name> <folder_name>

chown owner_name:group_name /path/to/folder  # คำสั่งสำหรับเปลี่ยน ownership ของ directory
Set Bash

เราจะทำการตั้งค่า bash แทน dash ที่เป็น default เพราะว่า PetaLinux นั้นใช้ Bash นะครับ ตั้งค่าโดยรันคำสั่ง

sudo dpkg-reconfigure dash 

จากนั้นให้ “เลือก no”

ตั้งค่า bash แทน dash
การรันคำสั่งเพื่อจะทำการ configure ให้ใช้ bash แทน dash

แล้วทำการแก้ไขไฟล์ bashrc เพื่อเพิ่มคำสั่งของเราเข้าไปในไฟล์ดังกล่าว โดยคำสั่งที่ระบุในไฟล์ bashrc นี้จะถูกโหลดเข้าไปใน shell ทุกครั้งที่มีการเปิด terminal ขึ้นมาใช้งาน ทำการรันคำสั่งเพื่อเปิดไฟล์

sudo gedit /etc/bash.bashrc  # คำสั่งสำหรับเปิดไฟล์ bashrc

จากนั้นให้ทำการระบุคำสั่งของเราต่อเข้าไปจากบรรทัดสุดท้ายของไฟล์ bashrc ที่ได้เปิดมา โดยคำสั่งที่ระบุเพิ่มเติมลงไปนั้น จะเป็นคำสั่งให้โหลดข้อมูลสำหรับคำสั่งต่างๆ ของตัว PetaLinux ที่เราเพิ่งได้ติดตั้งลงไป โดยโหลดเข้าไปใน shell การเพิ่มคำสั่งเข้าไปในไฟล์ bashrc เช่นนี้ ทำให้ทุกๆครั้งที่เราเปิด terminal ขึ้นมา เราสามารถเรียกใช้คำสั่งต่างๆ ของ PetaLinux ได้ โดยอัตโนมัติ

source /opt/petalinux/petalinux-v2017.4-final/settings.sh  # ทำการโหลดคำสั่งต่างๆ ของ PetaLinux เข้าไปใน shell เพื่อให้สามารถเรียกใช้โดยสะดวกขึ้น
ทำการแก้ไขไฟล์ bashrc

เปิดไฟล์ bashrc เพื่อทำการแก้ไข
เพิ่มคำสั่งเหล่านี้ลงไปตรงท้ายของไฟล์ bashrc
การเพิ่มคำสั่งสำหรับ PetaLinux เข้าไปที่บรรทัดสุดท้ายของไฟล์ bashrc
Create Project

มาถึงตรงนี้ก็จะเริ่มการสร้างโปรเจค PetaLinux แล้วนะครับ โดยให้เข้าไปที่โฟลเดอร์ที่เราต้องการที่จะสร้างโปรเจคใหม่ไว้ก่อน แล้วจากนั้นจึงพิมพ์คำสั่งเพื่อสร้างโปรเจคใหม่ ตามด้านล่าง

petalinux-create --type project --template zynq --name test_zynq  # คำสั่งในการสร้างโปรเจคใหม่ 

โดย
option –name: จะระบุเป็นชื่อโปรเจคใหม่ที่เราต้องการจะสร้างนะครับ
option –type: ระบุชนิดของการสร้าง ในตัวอย่างนี้เราจะทำการสร้างโปรเจค
option –template: ระบุ template ของโปรเจคที่เราต้องการจะสร้าง

สร้างโปรเจค petalinux
การรันคำสั่งเพื่อสร้างโปรเจค PetaLinux
Configure the Project

ขั้นตอนนี้จะเป็นการตั้งค่าให้โปรเจค PetaLinux กันนะครับ โดยให้เราเข้าไปที่โฟลเดอร์ที่เราเพิ่งสร้างโปรเจค PetaLinux ก่อน แล้วรันคำสั่งตามด้านล่าง

petalinux-config --get-hw-description=/home/user/basic/basic.sdk/  # คำสั่งสำหรับการตั้งค่าให้ PetaLinux

โดย
user: ให้เปลี่ยนเป็นชื่อ user ของผู้ใช้ที่กำลัง login อยู่นะครับ

ทำการตั้งค่า petalinux
รันคำสั่งเพื่อตั้งค่าให้โปรเจค PetaLinux

ซึ่งตรง /home/user/basic/basic.sdk/ ตรงนี้ ให้เราไปแก้ข้อมูลให้เป็นตำแหน่งของโฟลเดอร์ที่เราได้เก็บไฟล์ .hdf (ต้องการแค่ไฟล์นี้) ซึ่งเราได้สร้างมาจาก VIVADO (ตอน export อย่าลืม include bitstream เข้ามาด้วยนะครับ) ซึ่งตรงนี้จะใช้เวลาซักพักในการเปิดตัว configure

เมื่อ windows pop up ขึ้นมาได้ ให้เราทำการตั้งค่าดังนี้ โดยในตัวอย่างนี้จะเป็นการตั้งค่าให้อ่านไฟล์จาก SD-CARD ทั้งหมดครับ

หัวข้อ
การตั้งค่า
ไปที่ Subsystem AUTO Hardware Settings -> Advanced bootable images storage Settings -> boot image settings แล้วเลือก ‘image storage media’ ให้เป็น ‘primary sd’
ไปที่ Subsystem AUTO Hardware Settings -> Advanced bootable images storage Settings -> kernel image settings แล้วเลือก ‘image storage media’ ให้เป็น ‘primary sd’
ไปที่ Subsystem AUTO Hardware Settings -> Advanced bootable images storage Settings -> dtb image settings แล้วเลือก ‘image storage media’ ให้เป็น ‘primary sd’
ไปที่ Image Packaging Configurations แล้วเลือก ‘Root filesystem type’ ให้เป็น ‘SD card’
เลือก Image Packaging Configurations

เลือกตั้งค่าจากหัวข้อ Image Packaging Configurations

ตรงนี้จะใช้เวลาซักพักเพื่อให้ตั้งค่าเสร็จ แล้วก็จะได้โฟลเดอร์เพิ่มขึ้นมา 2 อันคือ Build กับ Components

หลังจากตั้งค่าเสร็จจะมีโฟลเดอร์ Build กับ components เพิ่มขึ้นมา
หลังจากตั้งค่าเสร็จจะพบว่ามีโฟลเดอร์ Build และ Components เพิ่มขึ้นมา
การตั้งค่าเพิ่มเติม(optional)
  • ตั้งค่าแสดงเวลา

    Petalinux-config –c kernel
    

    แล้ว “เลือก Kernel hacking > printk and dmesg options > show timing information on printks โดย “กด y”

    ตั้งค่าแสดงเวลา
    การตั้งค่าเพื่อแสดงเวลา
  • ตั้งค่า dropbear ที่เป็น SSH ที่เอาไว้แลกเปลี่ยนข้อมูลระหว่างเครื่อง

    Petalinux-config –c rootfs
    

    แล้วเลือก Filesystem packages > console network > dropbear > yes ตามรูป

    dropbear ที่เป็น SSH ที่เอาไว้แลกเปลี่ยนข้อมูลระหว่างเครื่อง
    การตั้งค่าสำหรับเพื่อส่งข้อมูลแลกเปลี่ยนระหว่างเครื่อง
Build

หลังจากที่เราทำการตั้งค่าเสร็จ ก็จะต้อง build เพื่อสร้างไฟล์ขึ้นมานะครับ โดยถ้าเราได้ทำการเปลี่ยนแปลงค่าอะไรไปใหม่ เราก็ต้อง build ใหม่ทุกครั้ง ซึ่งการ build แต่ละครั้ง ก็จะกินเวลาซักพักเลยครับ รันคำสั่งสำหรับ build ดังนี้

petalinux-build
เมื่อทำการตั้งค่าเสร็จ จะต้องทำการ build โปรเจคใหม่
เมื่อมีการตั้งค่าใหม่ ก็ต้องทำการ build ในทุกครั้ง
BOOT.bin files

ขั้นตอนนี้เราจะได้ไฟล์ image ของ PetaLinux กันแล้ว โดยอยู่ที่โฟลเดอร์ /path_to_project/images/linux
โดย
path_to_project: จะต้องแทนด้วยตำแหน่งที่เราได้ทำการสร้างโปรเจคไว้

หลังจาก build จะมีโฟลเดอร์ images ซึ่งบรรจุ image ที่ถูก build เสร็จแล้ว
ไฟล์ image ที่ถูกสร้างขึ้นจะอยู่ในโฟลเดอร์ /path_to_project/images/linux/

เมื่อเราได้ไฟล์ image มาแล้ว แต่ยังไม่มีไฟล์ BOOT.bin ซึ่งเป็นไฟล์หลักที่ทำหน้าที่ให้ ZYNQ Boot ในขั้นตอนนี้เราจะทำการสร้างไฟล์ BOOT.binโดยให้ทำการพิมพ์คำสั่งนี้

petalinux-package --boot --format BIN --fsbl ./images/linux/zynq_fsbl.elf --fpga ./images/linux/download.bit --u-boot   # รันคำสั่งเพื่อสร้างไฟล์ BOOT.bin

โดยตรงตำแหน่งชื่อไฟล์ “download.bit” นั้นต้องทำการแก้ไขให้ตรงตามชื่อไฟล์.bit ของเราที่อยู่ใน image ที่เพิ่ง build ขึ้นมาจากขั้นตอนที่แล้ว ซึ่งเมื่อรันคำสั่งด้านบนแล้วหากไม่ติดปัญหาใดๆเราก็จะได้ไฟล์ BOOT.bin มา(หากใช้ version 2018 ขึ้นไป จะแปลงเป็น system.bin มาให้แล้วครับ)

เมื่อ run คำสั่งนี้ก็จะได้ไฟล์ boot.bin มา
แสดงไฟล์ BOOT.BIN ที่ถูกสร้างขึ้นมาหลังจากรันคำสั่ง

Copy files to SD-CARD

ไฟล์ที่สำคัญที่เราจะใช้มีด้วยกัน 3 ไฟล์นะครับ โดยทั้งหมดอยู่ที่ตำแหน่งโฟลเดอร์ /path_to_project/images/linux/

ชื่อไฟล์
การใช้งาน
BOOT.bin เป็นไฟล์ที่รวม FSBL + bitstream + U-Boot เข้าด้วยกัน
image.ub เป็นไฟล์ kernel
system.dtb เป็นไฟล์ dtb
rootfs.tar.gz เป็นไฟล์ที่รวม root files system เข้าด้วยกัน

ซึ่งไฟล์ที่เราจะต้อง copy ไปยัง SD-CARD ในส่วนที่พาร์ทิชันที่เป็น FAT จะเป็นไฟล์ BOOT.bin และ image.ub ส่วนไฟล์ rootfs.tar.gz จะ copy ไปไว้ที่พาร์ทิชันที่เป็น ext4 ครับ

วิธีการคัดลอก(copy)ไฟล์ไปที่ SD-CARD ในส่วนของพาร์ทิชันที่เป็น FAT
วิธีการ copy ไปยัง SD-CARD ในส่วนของพาร์ทิชันที่เป็น FAT นั้นให้เข้าไปที่โฟลเดอร์ /path_to_project/images/linux/ ก่อน

cd /path_to_project/images/linux/  # เข้าไปในโฟลเดอร์ของโปรเจคที่เก็บไฟล์ที่เราได้จากการ build

โดย
path_to_project: เป็นตำแหน่งที่เราได้สร้างไฟล์โปรเจค

แล้วพิมพ์คำสั่งเพื่อคัดลอกไฟล์(copy) ดังด้านล่าง

sudo cp BOOT.BIN /media/user/boot/  #คัดลอกไฟล์ BOOT.BIN  
sudo cp image.ub /media/user/boot/   #คัดลอกไฟล์ image.up

โดย
user : คือชื่อของ user ที่เราใช้งานอยู่
boot: เป็นชื่อของพาร์ทิชันของ SD-CARD ที่เป็น FAT ซึ่งเราได้เตรียมไว้แล้ว

แสดงคำสั่งสำหรับทำการ copy ไฟล์ BOOT.BIN และ image.ub ไปยังโฟลเดอร์ /media/user/boot
คัดลอกไฟล์ BOOT.BIN และ image.ub ไปยัง SD-CARD ในส่วนของพาร์ทิชันที่เป็น FAT
วิธีการคัดลอก(copy)ไฟล์ไปยัง SD-CARD ในพาร์ทิชันที่เป็น EXT4 ( ในที่นี้ใช้ rootfs.tar.gz )
sudo cp rootfs.tar.gz /media/user/rootfs/ # คัดลอกไฟล์ rootfs.tar.gz

โดย

user : คือชื่อของ user ที่เราใช้งานอยู่
rootfs: คือชื่อของพาร์ทิชันของ SD-CARD ที่เป็น EXT4 ที่เราได้ทำการเตรียมไว้แล้ว

คำสั่งทำการ copy ไฟล์ rootfs.cpio ไปยังโฟลเดอร์ /media/user/rootfs
ทำการคัดลอกไฟล์ rootfs.tar.gz ไปยัง SD-CARD ในพาร์ทิชันที่เป็น ext4

และหลังจากนั้นให้เข้าไปที่พาร์ทิชันที่เป็น EXT4 แล้วทำการแก้ zip ไฟล์

cd /media/user/rootfs
sudo tar xvf rootfs.tar.gz
sync
sudo chown root:root /media/user/rootfs/
sudo chmod 755 /media/user/rootfs/
คำสั่งทำการแตกไฟล์ .cpio
รูปในตัวอย่างจะเป็นการแก้ไฟล์ .cpio นะครับ ซึ่งก็ใช้ได้เหมือนกัน
Boot Linux

หลังจากที่เราได้ทำการคัดลอกไฟล์(copy)ทั้งหมดลงไปใน SD-CARD เรียบร้อยแล้ว ให้ทำการ unmount พาร์ทิชันของ SD-CARD ทั้งหมดออก แล้วจากนั้นก็ถอด SD-CARD เพื่อไปเสียบเข้าไปที่บอร์ด

  • ทำการตั้งค่า pin ให้ไป boot ที่ SD-CARD
  • ทำการตั้งค่าการคุยด้วย UART โดยเลือก speed = 115200
  • เปิดไฟให้บอร์ด

จากนั้นบอร์ดก็จะเริ่มรันตัว linux โดย username:passward ที่ใช้จะเป็น root:root

การตั้งค่าต่างๆ หลังจากเสียบ SD-CARD เข้ากับบอร์ดแล้ว
การตั้งค่าต่างๆ หลังจากเสียบ SD-CARD เข้ากับบอร์ดแล้ว

ขั้นตอนระหว่างทำการ boot linux
บอร์ดเริ่มทำการบูทตัว linux ขึ้นมา

ก็จบไปแล้วนะครับสำหรับวิธีการทำ PetaLinux ถ้าถูกใจบทความนี้อย่าลืมกดช่วยกด like Facebook เพื่อเป็นกำลังใจสำหรับผู้เขียนด้วยนะครับ


Leave a Reply