Z2PCBA@gmail.com +66-897725026
การทำ package pre-built และการบูท(booting) ตัว PetaLinux Image
Wednesday November 6th, 2019
0

การทำ package pre-built และการบูท(booting) ตัว PetaLinux Image

สำหรับบทความก่อนหน้านี้ เราได้อธิบายถึงวิธีการติดตั้ง PetaLinux บน ZYNQ ( ซึ่งศึกษาเพิ่มเติมได้จากวิธีการติดตั้ง PetaLinux บน ZYNQ ตอนที่ 1 และ วิธีติดตั้ง PetaLinux บน ZYNQ ตอนที่ 2) และการสร้างแอพลิเคชันสำหรับ PetaLinux บน ZYNQ (ศึกษาเพิ่มเติมได้จาก การสร้างแอพลิเคชันเพื่อใช้งานเองสำหรับ PetaLinux บน ZYNQ)กันไปแล้ว ตอนนี้เราก็คงสามารถทำการรัน PetaLinux ได้กันแล้วนะครับ

สำหรับในบทความก่อนหน้านี้จะเจาะจงไปที่การบูท(boot)โดยผ่านตัว sd-card เท่านั้น ซึ่งวิธีดังกล่าวนั้นในบางครั้งมันไม่ค่อยสะดวกนักสำหรับนักพัฒนา(developer) เช่น กรณีที่อาจจะไม่พร้อมเรื่องอุปกรณ์หรือมีระยะเวลาที่จำกัด ดังนั้นในบทความนี้เราจะแนะนำถึงวิธีอื่นๆ สำหรับไว้ใช้บูททดสอบว่า ตัว PetaLinux Image ที่เราสร้างขึ้นมานั้นมีปัญหาหรือไม่นะครับเพื่อที่จะได้ทำการแก้ไขหรือปรับปรุงงานนั้น ก่อนที่เราจะทำการ burn โปรแกรมลงไปบนบอร์ดจริง

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

Package pre-built image

เริ่มด้วยการ package pre-built เพื่อที่จะทำการ prebuilt ตัว image กันก่อนนะครับ ขั้นตอนมีดังนี้

  1. ไปที่ folder ที่เก็บ project
  2. จากนั้นทำการ run คำสั่ง
    petalinux-package --prebuilt --fpga <FPGA bitstream>
    
    
  3. เมื่อทำเสร็จจะเห็นว่ามีโฟลเดอร์(folder) ที่ชื่อ pre-built ขึ้นมานะครับ

    รันคำสั่งสำหรับ pre-built
    เมื่อรันคำสั่งสำหรับ pre-built ตัว PetaLinux Image แล้ว จะมีการสร้างโฟลเดอร์ชื่อ pre-built ขึ้นมา

การทำ pre-built นั้น เราจะสามารถใช้ร่วมกันกับทั้ง JTAG ที่เป็นวิธีการทั่วไปซึ่งต้องใช้ฮาร์ดแวร์จริง และ ใช้ร่วมกับกับ QEMU ที่จะเป็น Emulator ที่เป็นซอฟแวร์ไว้สำหรับสร้างระบบเสมือน(simulation) โดยไม่ต้องใช้ตัวฮาร์ดแวร์จริงครับ

Boot level

ก่อนที่จะลงรายละเอียดในขั้นตอนของการบูท(boot) ตัว pre-built image เราจำเป็นต้องทำความเข้าใจในเรื่อง boot level กันก่อน สำหรับการบูท(boot) ตัว pre-built image นั้นรองรับ boot level ได้ 3 ระดับ ซึ่งแต่ละระดับนั้น จะมีรายละเอียดแตกต่างกันดังข้อมูลด้านล่างนะครับ แต่โดยส่วนใหญ่ผมก็จะใช้งานที่ระดับ 3 ครับ

  • a) Level 1: FPGA bitstream + FSBL.
  • b) Level 2: FPGA bitstream + FSBL +boot U-Boot.
  • c) Level 3: FPGA bitstream + FSBL +boot U-Boot + Linux image.
การบูท(boot) PetaLinux Image ด้วยซอฟแวร์ในการสร้างระบบเสมือน ผ่าน QEMU

การบูทด้วยวิธีแรกจะทำการบูทโดยใช้ซอฟแวร์ในการสร้างระบบเสมือน(simulated) ซึ่งระบบเสมือนนี้เป็นการใช้ซอฟแวร์ในการจำลองระบบฮาร์ดแวร์(hardware)ที่เราต้องการขึ้นมา ในการใช้ QEMU นี้จึงไม่จำเป็นต้องใช้ฮาร์ดแวร์(hardware)จริง ก็สามารถทดสอบระบบที่เราออกแบบบนคอมพิวเตอร์เพียงอย่างเดียวได้เลย วิธีการมีดังนี้

  1. ทำการสร้าง boot image ให้เสร็จ จากนั้น
  2. ทำการเปลี่ยน Image Packaging Configuration rootfs ให้เป็น INITRAMFS ก่อน ถ้าใช้ QEMU แล้วตั้งค่า rootfs เป็น SD-CARD จะต้องไปทำบางอย่าง ซึ่งยุ่งยาก ให้ทำ INITRAMFS ง่ายกว่า โดยตั้งค่าให้อยู่ที่ INITRAMFS ครับ จากนั้นก็ทำการสั่ง build ใหม่
    petalinux-config
    
    

    ทำการเปลี่ยน Image Packaging Configuration rootfs ให้เป็น INITRAMFS
    ทำการเปลี่ยน Image Packaging Configuration rootfs ให้เป็น INITRAMFS

  3. เมื่อเราทำการตั้งค่า(config) เสร็จแล้ว ให้เราทำการสร้าง pre-built ตัว image ตามคำสั่งที่ได้กล่าวถึงเมื่อตอนต้น เพื่อเตรียมตัว image ที่จะทำการบูทต่อไป โดยการใช้ QEMU ครับ
  4. ทำการบูท image ผ่าน QEMU ซึ่งเป็นระบบจำลองฮาร์ดแวร์โดยการใช้เพียงซอฟแวร์ในการสร้างระบบเสมือน(simulation) ด้วยคำสั่ง
    petalinux-boot --qemu --prebuilt 3
    
    
  5. เมื่อเสร็จสิ้นก็จะเข้าหน้าต่างเพื่อทดสอบระบบครับ ดังรูปด้านล่าง

    หลังจากทำการสั่งเพื่อบูทเข้าสู่ระบบเสมือนด้วย QEMU ก็จะเข้าสู่หน้าต่างเพื่อลองทดสอบระบบ
    หลังจากทำการสั่งเพื่อบูทเข้าสู่ระบบเสมือนด้วย QEMU ก็จะเข้าสู่หน้าต่างเพื่อลองทดสอบระบบ

เพิ่มเติม

  • หากใช้การบูทผ่าน QEMU นั้น จะไม่สามารถใช้งานร่วมกับ boot level 1 ได้ (–prebuilt 1) ได้นะครับ
  • ทำการ กด ‘ctrl+A’ แล้วปล่อย แล้วกด ‘x’ เพื่อออกจาก QEMU
การบูท(boot) PetaLinux Image ด้วยฮาร์ดแวร์จริงผ่าน JTAG

วิธีที่สองนี้ ก็เป็นวิธีพื้นฐานทั่วไปนะครับ นั่นก็คือการ Built ผ่านทาง JTAG โดยใช้ฮาร์ดแวร์จริงๆ ไม่ใช่ระบบจำลองฮาร์ดแวร์ด้วยซอฟแวร์แบบวิธีที่แล้ว ซึ่งข้อเสียของวิธีนี้คือมันจะช้าครับ โดยวิธีการมีดังนี้นะครับ

  1. สร้าง PetaLinux boot image เสร็จเรียบร้อย
  2. เสียบ JTAG บนบอร์ด ทำการเปลี่ยนเป็น jtag mode และตั้งค่า serial port
  3. รันคำสั่งสำหรับบูทดังนี้
    petalinux-boot --jtag --fpga --u-boot --kernel
    
    

    รันคำสั่งสำหรับบูทตัว PetaLinux Image ผ่าน JTAG
    รันคำสั่งสำหรับบูทตัว PetaLinux Image ผ่าน JTAG

  4. เมื่อเสร็จสิ้น เราก็จะสามารถเข้าไปใช้งานตัว kernel ได้ดังรูปด้านล่างนะครับ

    สามารถเข้าใช้งาน kernel หลังเสร็จจากการบูทผ่าน JTAG
    สามารถเข้าใช้งาน kernel หลังเสร็จจากการบูทผ่าน JTAG

    ส่วนด้านล่างนี้เป็นคำสั่งเพิ่มเติมเวลาต้องการ download ทีละส่วนนะครับ

  • ในส่วนของการ download bitstream ลงบอร์ด ให้ใช้คำสั่งนี้
    petalinux-boot --jtag --fpga –bitstream <BIT stream>
    
    
  • สำหรับการ download u-boot ลงบอร์ด ให้ใช้คำสั่งนี้
    petalinux-boot --jtag --u-boot
    
    
  • การ download kernel ลงบอร์ด ให้ใช้คำสั่ง
    petalinux-boot --jtag –kernel
    
    

เพิ่มเติม

  • เราจำเป็นต้องลง JTAG Driver ด้วยนะครับ โดยให้รันคำสั่งด้านล่างที่ /opt/Xilinx/Vivado/Version/data/xicom/cable_drivers/lin64/install_script/install_drivers
    ./install_drivers
    

    โดยให้ลงตัว driver ขณะที่ไม่ได้เสียบ JTAG ไว้นะครับ

  • และเราก็จำเป็นต้องลงตัว Image Packaging Configuration rootfs ด้วยนะครับ ถ้าไม่มี sd-card เราก็จำเป็นต้องตั้ง INITRAMFS
การบูท(boot) PetaLinux Image ด้วย TFTP

การบูท(boot) ด้วย TFTP นั้นจะมีข้อดีตรงที่จะเร็วกว่าผ่านทาง JTAG (แต่ยังใช้ JTAG อยู่นะครับ และตั้งค่าให้เป็น JTAG mode เหมือนกัน แต่มีการลดและเพิ่มรายละเอียดในบางขั้นตอน) เพราะโดยส่วนใหญ่ไฟล์ rootfs นั้นจะมีขนาดที่ค่อนข้างใหญ่ การโหลดด้วย JTAG โดยทั่วไปนั้นจะกินเวลาพอสมควร การใช้ TFTP เข้ามาช่วย จะช่วยลดเวลาในส่วนดังกล่าว นอกจากนี้ ยังมีข้อดีคือ เราไม่จำเป็นที่จะต้องโปรแกรมตัวฮาร์ดแวร์ใหม่ทุกครั้ง ถ้ามีการเปลี่ยน kernel อีกด้วย เพราะว่าวิธีนี้มันจะไปดึงไฟล์มาใหม่เองตอนทำการบูท(boot) แต่ว่าเราต้องมีขั้นตอนเพิ่มขึ้นในส่วนของการติดตั้ง TFTP server และจำเป็นต้องทำ package prebuilt สำหรับ TFTP โดยเฉพาะก่อนด้วย

ตั้งค่า TFTP Server
เริ่มด้วยการตั้งค่า TFTP server ก่อนนะครับ โดยขั้นตอนมีดังนี้

  1. เริ่มต้นทำการติดตั้ง TFTP Server ด้วยการรันคำสั่งติดตั้งดังนี้
    sudo apt-get install xinetd tftpd-hpa
    
  2. จากนั้นจึงทำการตั้งค่า(configuration)ต่างๆ ให้กับ TFTP Server โดยทำการรันคำสั่งเพื่อแก้ไขไฟล์ที่เก็บข้อมูลสำหรับตั้งค่า
    sudo nano /etc/xinetd.d/tftp
    

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

    service tftp
    {
            protocal = udp
            port = 69
            socket_type = dgram
            wait = yes
            user = nobody
            server = /usr/sbin/in.tftpd
            server_args = /tftpboot
            disable = no
    }
    

    จากนั้นกด ‘ctrl+x’ เพื่อ ‘save’ และออก

    ซึ่งจะเห็นว่าในส่วนของการตั้งค่าตรงนี้เราได้ทำการกำหนดให้ตัว TFTP Server ของเราระบุโฟลเดอร์สำหรับเก็บข้อมูลอยู่ที่โฟลเดอร์ /tftpboot นะครับ

    การตั้งค่าให้กับ TFTP Server
    การตั้งค่าให้กับ TFTP Server

  3. เข้าไปตั้งค่า(config) ให้กับ PetaLinux โดยการรันคำสั่ง
    petalinux-config
    
    
  4. เลือกเมนู Image Packaging Configuration > Copy final images to tftpboot > tftpboot directory ซึ่งค่าตั้งต้น(default) นั้นจะกำหนดอยู่ที่ /tftpboot

    การตั้งค่าในส่วน Image Packaging Configuration เพื่อระบุตำแหน่งสำหรับทำการคัดลอกไฟล์ image
    การตั้งค่าในส่วน Image Packaging Configuration เพื่อระบุตำแหน่งสำหรับทำการคัดลอกไฟล์ image

  5. ทำการสร้างโฟลเดอร์ /tftpboot และกำหนดสิทธิ์ในการเข้าใช้งานโฟลเดอร์โดยเปลี่ยนชื่อ group,owner ของโฟลเดอร์ดังกล่าว ด้วยนะครับ ด้วยคำสั่ง
    sudo mkdir /tftpboot
    chown <ชื่อ group>:<ชื่อ user> /tftpboot
    

    กำหนดสิทธิ์ในการเข้าใช้งานโฟลเดอร์โดยเปลี่ยนชื่อ group,owner ของโฟลเดอร์ tftpboot

    กำหนดสิทธิ์ในการเข้าใช้งานโฟลเดอร์โดยเปลี่ยนชื่อ group,owner ของโฟลเดอร์ tftpboot


    ก็จะเสร็จสิ้นในส่วนของการเตรียมตัว PetaLinux Image ไว้บน TFTP Server แล้วนะครับ

การบูท PetaLinux Image ผ่าน TFTP
หลังจากนั้นให้ทำการ build PetaLinux (ซึ่งวิธีการก็ได้พูดถึงไปแล้วจากบทความก่อนหน้า) โดยตัวไฟล์จะถูกคัดลอกไปที่โฟลเดอร์ /tftpboot ด้วย จากนั้นให้ทำตาม step ดังนี้

  1. ทำการบูท(boot) ผ่านทาง JTAG โดยทำการกำหนด boot level เพียงแค่ระดับ 2 เพราะในกรณีนี้เราต้องการใช้งานถึงแค่ระดับ u-boot โดยการรันคำสั่งดังนี้
    petalinux-boot --jtag --prebuilt 2
    
  2. พอ u-boot เข้า autorun ให้กดปุ่มอะไรบนคีย์บอร์ดก็ได้ เพื่อที่จะทำการหยุด
  3. ตรวจสอบ IP ของตัว TFTP Server ด้วยการรันคำสั่ง
    print serverip

    รันคำสั่งสำหรับตรวจสอบ IP ของตัว TFTP Server
    รันคำสั่งสำหรับตรวจสอบ IP ของตัว TFTP Server

  4. ตั้งค่า IP ของ TFTP Server โดยให้ตั้งค่าของ Host IP ให้ถูกต้องตามหายเลข IP ของตัว TFTP Server
    ( ตรง xx.xx.xx.xx ให้กำหนดเป็นหมายเลข TFTP Server ที่ถูกต้อง)

    set serverip xx.xx.xx.xx
    saveenv
    

    เซต Server IP ของ TFTP Server
    เซต Server IP ของ TFTP Server

  5. ทำการบูทตัว kernel ด้วยคำสั่ง
    run netboot
    

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


พื้นที่โฆษณา




Leave a Reply