Compile U-Boot for mini2440

เดี๋ยวนี้ถ้าพูดถึง Embedded board คงไม่มีใครไม่รู้จัก Raspberry Pi ทั้งใช้ง่ายและสะดวกสบายมาก แต่บางทีชีวิต Programmer ก้อยากมีช่วงลำบากบ้าง วันนี้จึงนำเสนอ Board ที่เก่าหน่อย แล้วก้ทุกอย่างต้อง compile เองเกือบทั้งหมด นั่นคือ FriendlyARM mini2440 ซึ่งหลายๆคนบอกว่า ไม่ Friendly เลย เพื่อไม่ให้เป็นการเสียเวลาเรามาเริ่มกันเลย สำหรับการ compile ครั้งนี้จะทำบน ubuntu นะครับ

Cross-Compile

อย่างแรกที่ต้องมีในการ compile U-Boot คือ cross-compile แค่เริ่มก้เห็นความยากแล้วใช่มั้ยครับ cross-compile คือ การ compile code สำหรับอุปกรณ์อื่นบนเครื่องเราเอง เช่น ใช้เครื่องคอมพิวเตอร์เรา compile code สำหรับ arm แล้วทำไมไม่ compile บน arm เลยหล่ะ ก้อาจจะเพราะว่า arm ช้าจนเกินไป ซึ่งใช้คำสั่งในการติดตั้งดังนี้

$ sudo apt-get install gcc-arm-linux-gnueabi

ลองทดลองได้โดยใช้คำสั่งดังนี้

$ arm-linux-gnueabi-gcc
arm-linux-gnueabi-gcc: fatal error: no input files
compilation terminated.

ซึ่งขึ้นแบบนี้ไม่ต้องกังวลนะครับ หมายถึงใช้ได้

Compile U-Boot

ต่อมาเราจะทำการ compile U-Boot โดยเริ่มต้นจากการ clone repository ของ U-Boot มาก่อน (ซึ่งก้คือ code นั่นเอง) จากนั้นต้องทำการเซ็ค CROSS_COMPILE สุดท้ายก้ทำการ compile ได้โดยใช้คำสั่งดังนี้

$ mkdir ~/uboot && cd ~/uboot
$ git clone git://repo.or.cz/u-boot-openmoko/mini2440.git
$ export CROSS_COMPILE=arm-linux-gnueabi-
$ cd mini2440 && make mini2440_config
$ make

ถ้าสำเร็จ ก้สามารถนำไฟล์ u-boot.bin ไปลงบอร์ด mini2440 ได้ตามวิธีใน link นี้ แต่ของที่ผมทำมันไม่สำเร็จนะครับ โดยขึ้น error ดังนี้

{standard input}: Assembler messages:
{standard input}:22: Error: lo register required -- `ldr ip,[r8,#32]'
{standard input}:23: Error: lo register required -- `ldr pc,[ip,#0]'
...

ซึ่งจากการค้นหาที่มาของภัยพิบัติดังกล่าว พบว่าเราใช้ optimize มากเกินไป จึงต้องแก้ cpu/arm920t/config.mk โดยเพิ่ม -marm ไปดังนี้

PLATFORM_RELFLAGS += -fno-strict-aliasing  -fno-common -ffixed-r8 \
        -msoft-float

PLATFORM_CPPFLAGS += -march=armv4t -marm
# ===========================================================

จากนั้นทำการ make ใหม่ครับ เห็นมั้ยครับว่าจุดเริ่มต้นของความสบายมักจะเกิดจากความลำบากนะครับ ถ้าไม่อยากลำบาก compile เองผมมีอันที่ compile ไว้ให้แล้วครับ ตาม link นี้เลย

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s