09 02 |
Shared library on embedded platform-以ARM9和uClibc為例作者: Joey 日期: 2008-09-02 17:21 |
在講解UI upgrade之前,先談談Linux的shared library,因為這對往後要交叉編譯的應用軟體是蠻重要的事情,在四,五年前,ARM一直都以NO MMU姿態出現在各個不同的嵌入式平台,所以當時所有的可執行檔都編成static binary外加去頭(用objcopy把elf頭檔幹掉),這樣做是因為NO MMU的LINUX不能吃ELF格式的可執行檔,而近幾年ARM with MMU支援的平台越來越多,所以很多人把應用軟體諸如busybox, lighttpd…等都編譯成shared binary elf格式的可執行檔
因為ARM9有MMU,所以ARM9 Linux可以吃ELF格式的檔案,並且也能動態連結shared library,而這讓我們編譯程式上有更多的可行性,如果以static binary和shared binary分類,那編譯的方式大概如下(這邊舉的例子都是用ELDK編譯,所以請先下載ELDK+uClibc支援的toolchain)
(1) static binary:
編譯方式:arm-linux-gcc –static –o hello hello.c
編譯出來的結果用file指令查詢如下
(2) shared binary:
編譯方式:arm-linux-gcc –o hello hello.c
編譯出來的結果用file指令查詢如下
Static binary只要直接擺在arm9 linux的平台就可以執行了,而shared library需要一段手續
(1)用arm-linux-ldd查詢得知要執行hello程式需要libc.so.0,如下圖
(2)到ELDK toolchain安裝的資料夾arm/lib下找尋ld-uClibc-0.9.27.so和libuClibc-0.9.27.so,並把這兩個檔案複製到目標板的/lib資料夾,並把它們屬性改為可執行
(3)新增symbolic link,如下圖片,我總共新增了libc.so.0, libc.so,和ld-uClibc.so.0這三個symbolic link
做完上述三件事,可以試著執行看看動態連結的可執行檔hello,而動態連結和elf檔的詳細說明請參考以下網站
fw_printenv-control u-boot enviroment variables under linux (2009-05-12 16:35)
rpcapd與netcat-測試嵌入式系統的好工具 (2009-04-09 17:06)
udev-強大的device node管理系統 (2009-02-02 20:35)
Framebuffer兩三事-Test On QT2410 (2009-01-12 16:29)
UIO-Linux user space I/O driver (2008-12-15 14:50)
GDB-刺入bug心臟的寶劍 (2008-10-15 16:11)
Telnet daemon-RS232以外的選擇 (2008-10-03 18:57)
在嵌入式系統切換file system-以squashfs和jffs2為例 (2008-10-01 19:44)
Linux kernel module-進入系統核心的鑰匙 (2008-09-12 14:03)