1. 程式人生 > >ARM開源庫移植例項

ARM開源庫移植例項

libjpeg移植

原始碼下載地址: https://sourceforge.net/projects/libjpeg/files/

解壓  tar xzf  libjpeg-turbo-1.2.1.tar.gz
配置 ./configure --prefix=$(pwd)/tmp --host=arm-linux CC=arm-none-linux-gnueabi-gcc --enable-shared --enable-static
編譯安裝 make && make install

安裝完成之後,把庫檔案拷貝到目標板的根檔案系統

cd tmp/lib
cp *.so.* ~/omapl138/rootfs/lib -d

由於jpeg解碼需要連結jpeg庫,使用gcc命令的話比較複雜,建議使用makefile來編譯

Makefile
  1 INCLUDE=-I /home/wu/arm-application/jpeg_src/libjpeg-turbo-1.2.1/tmp/include
  2
  3 LIBS=-L /home/wu/arm-application/jpeg_src/libjpeg-turbo-1.2.1/tmp/lib -ljpeg
  4
  5 all:jpeg-test
  6
  7 jpeg-test:
  8     arm-none-linux-gnueabi-gcc -o jpeg-test jpg2rgb.c $(INCLUDE) $(LIBS)
  9
 10 clean:
 11     rm-rfv jpeg-test

tslib移植

tslib下載地址:https://github.com/kergoth/tslib/releases 從上面github連結上下載1.4版本的,並移植到omapl138目標板上

解壓 tar xzf tslib-1.4.tar.gz
cd tslib
./autogen.sh

生成configure

./autogen.sh

配置,生成Makefile

  ./configure --host=arm-none-linux-gnueabi- --prefix=$(pwd)/tmp
  --enable-debug=no

生成Makefile後,編譯出現fbutils.c:(.text+0x104): undefined reference to `rpl_malloc' 這種錯誤

解決辦法:執行autogen.sh後,修改config.h.in 把裡面的#undef malloc,然後就編譯通過

安裝到原始碼檔案的tmp目錄,生成/bin /etc /lib /include資料夾,並放入相應的檔案

把tmp目錄的檔案拷貝到目標系統

cd tmp
cp * -rf ~/omapl138/rootfs

拷貝完成之後,在目標檔案系統上有相應的庫和測試程式

設定環境變數,把下面的環境變數新增到系統 vi /etc/profile

export TSLIB_TSDEVICE=/dev/input/event0 
export TSLIB_CALIBFILE=/etc/pointercal 
export TSLIB_CONFFILE=/etc/ts.conf 
export TSLIB_PLUGINDIR=/lib/ts 
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0 

使用命令source /etc/profile 使之生效 就可以使用tslib測試程式啦

lighttpd

原始碼下載地址 http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttpd-1.4.30.tar.gz

解壓:

tar -zxvf lighttpd-1.4.30.tar.gz

配置:

1, 在當前目錄建立一個臨時目錄  mkdir tmp
2.  配置   ./configure --prefix=$(pwd)/tmp  --host=arm-linux CC=/home/wu/omapl138/cross_compile/arm-2009q1/bin/arm-none-linux-gnueabi-gcc --disable-FEATURE --enable-shared --disable-static --disable-lfs --disable-ipv6 --without-PACKAGE --without-valgrind --without-openssl --without-kerberos5 --without-pcre --without-zlib --without-bzip2 --without-lua  
    配置過程出現以下錯誤:
    configure: error: zlib headers not found, install them or build without --with-zlib
    重新用以下命令配置:
 ./configure --prefix=$(pwd)/tmp  --host=arm-linux CC=/home/wu/omapl138/cross_compile/arm-2009q1/bin/arm-none-linux-gnueabi-gcc --disable-FEATURE --enable-shared --disable-static --disable-lfs --disable-ipv6 --without-PACKAGE --without-valgrind --without-openssl --without-kerberos5 --without-pcre --without-zlib --without-bzip2 --without-lua
3.  編譯 安裝
    make && make install

安裝完成後將在tmp目錄生成lib sbin share 三個目錄 然後在這個tmp目錄上手動建立如下目錄 cache, cgi-bin config log sockets upload vhosts webpages

將原始碼目錄中的doc/config目錄下的config.d,lighttpd.conf和modules.conf拷貝到安裝目錄tmp目錄中的config目錄下

【1】修改複製過來的lighttpd.conf 1)將16行至20行修改為如下:

 16 var.log_root    = "/home/wu/arm-application/lighttpd_1.4.30_src/lighttpd-1.4.30/tmp/lo    g"
 17 var.server_root = "/home/wu/arm-application/lighttpd_1.4.30_src/lighttpd-1.4.30/tmp"
 18 var.state_dir   = "/home/wu/arm-application/lighttpd_1.4.30_src/lighttpd-1.4.30/tmp"
 19 var.home_dir    = "/home/wu/arm-application/lighttpd_1.4.30_src/lighttpd-1.4.30/tmp"
 20 var.conf_dir    = "/home/wu/arm-application/lighttpd_1.4.30_src/lighttpd-1.4.30/tmp/co    nfig"

2)將61行和93行修改為如下

var.cache_dir   = server_root + "/cache"
server.use-ipv6 = "disable"
  1. 將104和105行註釋掉,如下
#server.username  = "lighttpd"
#server.groupname = "lighttpd"

4)將115行修改為如下

server.document-root = server_root + "/webpages"

5)將127行註釋掉,如下所示:

#server.pid-file = state_dir + "/lighttpd.pid"

6)將152行、158行、191行註釋掉,如下所示:

#include "conf.d/access_log.conf"
#include "conf.d/debug.conf"
#server.network-backend = "linux-sendfile"

7)根據系統資源設定207行和225行的數值,本系統的設定分別如下褐色加粗字型所示:

server.max-fds = 256
server.max-connections = 128

8)註釋掉314-316行

343 $HTTP["url"] =~ "\.pdf$" {
344   server.range-requests = "disable"
345 }

9)373行改成

408 server.upload-dirs = ( "/home/wu/arm-application/lighttpd_src/lighttpd-1.4.51/tmp/uplo    ad" )

  1. 336行修改為:
static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", ".scgi" ,".cgi")

11)88行修改,預設使用80埠先修改8080埠

server.port = 8080

【2】修改安裝目錄下config.d/config/cgi.conf

1)將15至19行這一段配置修改如下(原來的):

 15 #cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
 16 #                               ".cgi" => "/usr/bin/perl",
 17 #                               ".rb"  => "/usr/bin/ruby",
 18 #                               ".erb" => "/usr/bin/eruby",
 19 #                               ".py"  => "/usr/bin/python" )

修改後

15 cgi.assgin=(".cgi"=>"")
 16 #cgi.assign                 = ( ".pl"  => "/usr/bin/perl",
 17 #                               ".cgi" => "/usr/bin/perl",
 18 #                               ".rb"  => "/usr/bin/ruby",
 19 #                               ".erb" => "/usr/bin/eruby",
 20 #                               ".py"  => "/usr/bin/python" )

2)將28行的註釋符去掉

alias.url += ( "/cgi-bin" => server_root + "/cgi-bin" )

編寫一個簡單的html頁面進行測試 index.html

  1 <html>
  2 <head>
  3 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  4 <title>lighttpd測試</title>
  5 </head>
  6 <body>
  7 <p>輕量級web伺服器lighttpd的編譯及配置(for arm-linux)</p>
  8 <hr>
  9 <p>測試頁面</p>
 10 </body>
 11 </html>

將此目錄拷貝到安裝目錄tmp的webpages子目錄中

將安裝目錄tmp拷貝到目標檔案系統中:

目標檔案系統中建立目錄:
mkdir -p /home/wu/arm-application/lighttpd_1.4.30_src/lighttpd-1.4.30/
主機中拷貝到nfs目錄:
cp -rd tmp/ /home/wu/arm-application/lighttpd_1.4.30_src/lighttpd-1.4.30/

開啟目標機的控制檯,掛載nfs啟動,使用如下目錄啟動web伺服器

cd /home/wu/arm-application/lighttpd_1.4.30_src/lighttpd-1.4.30/sbin
啟動web伺服器
./lighttpd -f ../config/lighttpd.conf

現在web伺服器搭建完成,使用cgi的時候出現了問題,發現必須要安裝pcre這個庫 最新版下載地址:https://sourceforge.net/projects/pcre/files/latest/download

解壓

unzip pcre2-10.32.zip

配置

cd pcre2-10.32
./configure --prefix=$(pwd)/tmp  --host=arm-linux CC=/home/wu/omapl138/cross_compile/arm-2009q1/bin/arm-none-linux-gnueabi-gcc

編譯,安裝

make && make install