<ก่อนหน้านี้ | Contents | ถัดไป>
การบูทเครือข่ายบนระบบโดยใช้เฟิร์มแวร์ U-Boot ประกอบด้วยสามขั้นตอน: a) การกำหนดค่าเครือข่าย b) การโหลดอิมเมจ (เคอร์เนล/ramdisk เริ่มต้น/dtb) ลงในหน่วยความจำ และ c) การรันโค้ดที่โหลดก่อนหน้านี้จริง ๆ
ก่อนอื่น คุณต้องกำหนดค่าเครือข่าย โดยอัตโนมัติผ่าน DHCP โดยเรียกใช้
setenv ออโต้โหลดไม่มี dhcp
หรือด้วยตนเองโดยการตั้งค่าตัวแปรสภาพแวดล้อมหลายตัว
setenv ipaddr setenv netmask
setenv เซิร์ฟเวอร์ip setenv dnsip
setenv gatewayip
หากต้องการ คุณสามารถทำให้การตั้งค่าเหล่านี้ถาวรโดยเรียกใช้
บันทึก
หลังจากนั้น คุณต้องโหลดอิมเมจ (เคอร์เนล/เริ่มต้น ramdisk/dtb) ลงในหน่วยความจำ ทำได้โดยใช้คำสั่ง tftpboot ซึ่งจะต้องมีที่อยู่สำหรับเก็บภาพไว้ในหน่วยความจำ น่าเสียดายที่แผนที่หน่วยความจำอาจแตกต่างกันไปในแต่ละระบบ ดังนั้นจึงไม่มีกฎทั่วไปที่สามารถใช้ที่อยู่นี้ได้
ในบางระบบ U-Boot จะกำหนดชุดของตัวแปรสภาพแวดล้อมไว้ล่วงหน้าด้วยที่อยู่การโหลดที่เหมาะสม: kernel_addr_r, ramdisk_addr_r และ fdt_addr_r คุณสามารถตรวจสอบว่าถูกกำหนดโดยการเรียกใช้หรือไม่
การพิมพ์ kernel_addr_r ramdisk_addr_r fdt_addr_r
หากไม่ได้กำหนดไว้ คุณต้องตรวจสอบเอกสารของระบบเพื่อหาค่าที่เหมาะสมและตั้งค่าด้วยตนเอง สำหรับระบบที่ใช้ Allwinner SunXi SOCs (เช่น Allwinner A10 ชื่อสถาปัตยกรรม “sun4i” หรือ Allwinner A20 ชื่อสถาปัตยกรรม “sun7i”) คุณสามารถใช้ค่าต่อไปนี้ได้:
setenv kernel_addr_r 0x46000000 setenv fdt_addr_r 0x47000000 setenv ramdisk_addr_r 0x48000000
เมื่อกำหนดที่อยู่สำหรับโหลดแล้ว คุณสามารถโหลดรูปภาพลงในหน่วยความจำจากเซิร์ฟเวอร์ tftp ที่กำหนดไว้ก่อนหน้านี้ได้ด้วย
tftpboot ${kernel_addr_r} tftpboot ${fdt_addr_r}
tftpboot ${ramdisk_addr_r}
ส่วนที่สามคือการตั้งค่าบรรทัดคำสั่งเคอร์เนลและรันโค้ดที่โหลดจริง U-Boot ส่งผ่านเนื้อหาของตัวแปรสภาพแวดล้อม "bootargs" เป็นบรรทัดคำสั่งไปยังเคอร์เนล ดังนั้นพารามิเตอร์ใดๆ สำหรับเคอร์เนลและโปรแกรมติดตั้ง - เช่น อุปกรณ์คอนโซล (ดูหัวข้อ 5.3.1) หรือตัวเลือกก่อนหน้า (ดูส่วนที่ 5.3.2 .XNUMX และภาคผนวก B) - สามารถตั้งค่าได้ด้วยคำสั่งเช่น
setenv bootargs console=ttyS0,115200 rootwait ตื่นตระหนก=10
คำสั่งที่แน่นอนในการรันโค้ดที่โหลดก่อนหน้านี้ขึ้นอยู่กับรูปแบบรูปภาพที่ใช้ ด้วย uImage/uInitrd คำสั่งคือ
bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r} บูต
และด้วยอิมเมจ Linux ดั้งเดิม มันคือ
bootz ${kernel_addr_r} ${ramdisk_addr_r}:${ขนาดไฟล์} ${fdt_addr_r}
หมายเหตุ: เมื่อทำการบูทอิมเมจ linux มาตรฐาน สิ่งสำคัญคือต้องโหลดอิมเมจ ramdisk เริ่มต้นหลังจากเคอร์เนลและ dtb เนื่องจาก U-Boot ตั้งค่าตัวแปรขนาดไฟล์เป็นขนาดของไฟล์สุดท้ายที่โหลด และคำสั่ง bootz ต้องการขนาดของอิมเมจ ramdisk ให้ทำงานได้อย่างถูกต้อง ในกรณีของการบูทเคอร์เนลเฉพาะแพลตฟอร์ม เช่น เคอร์เนลที่ไม่มีโครงสร้างอุปกรณ์ เพียงข้ามพารามิเตอร์ ${fdt_addr_r}