開發板遠端操作SQL SERVER解決方案

2021-09-24 18:15:43 字數 3231 閱讀 8191

環境:

開發板:freescale 2.6 armv71,系統唯讀

,唯一可以讀寫的路徑是/tmp/sd(這是乙個sd卡)。程式放在/tmp/sd/transfer下(下文以執行路徑代替),sql語句以檔案形式儲存在開發板上,語句字符集是gbk。

伺服器:伺服器安裝的是sql server 2008。

功能:程式能夠連線上伺服器的資料庫,執行sql語句等等。

考慮到開發板的sd卡容量有限,不便於安裝編譯器,於是決定交叉編譯。

交叉編譯環境:ubuntu 12.04 (也可以選擇其他的)。待編譯的transfer.c和transfer.**件放在/home/arm下(下文以編譯路徑代替)

為了使用方便,將解壓目錄下的opt/toolschain/4.4.3/bin新增到系統環境變數中。

為了訪問sql server,我們需要安裝freetds。當然這個freetds編譯出來的動態庫也必須是要在開發板使用的,所以要使用交叉編譯器編譯

執行以下命令

./configure  --prefix=/home/freetds-arm --sysconfdir=/tmp/sd/transfer --with-tdsver=7.1  --enable-msdblib  --disable-libiconv  --host=arm-none-linux-gnueabi

解釋下各項引數的意義。

--prefix=/home/freetds-arm ,設定freetds安裝的目錄,考慮開發板上是唯讀的,所以最好自己手動指定鏈結庫路徑而不採用預設路徑。另外個原因這是ubuntu,而編譯出來的是arm版本的。

--sysconfdir=/tmp/sd/transfer ,如果確定sql語句不使用中文,可以不要這個引數。這個引數設定freetds配置檔案的路徑。(預設是在prefix指定的路徑下的ext資料夾)。為什麼要單獨把引數資料夾設定為/tmp/sd/transfer,下面再講

--with-tdsver=7.1 ,設定tds協議的版本,適用於sql server2008。其他版本請自行修改版本號

--enable-msdblib,允許ms(微軟)資料庫連線,因為還有其他資料庫使用tds協議。

--disable-libiconv,關閉字符集自動轉換(不關閉的話會中文亂碼)

--host=arm-none-linux-gnueabi,指定交叉編譯器(如果之前沒有設定系統環境變數的話這裡要手動指定編譯器路徑)

然後make

make install

解決中文亂碼

freetds連線預設是採用iso-8859-1編碼,是不支援中文的。在freetds安裝目錄下的ext資料夾(如果使用--sysconfdir,就在其指定的路徑下)裡有個freetds.conf,可以設定連線字符集。方法是在[global]條目下新增一行client charset=gbk(假設你的sql語句是gbk格式的,其他格式請使用對應的字符集)。

不過在板子上使用異常,莫名其妙程式崩潰。後來檢視freetds源**,發現預設支援utf-8。

於是首先將client charset=gbk改為client charset=utf-8,然後將sql語句從gbk格式轉換成utf-8格式即可

這裡使用libiconv來進行轉換(還用其他方法,請參考網路)

要包含標頭檔案iconv.h

void gbk_to_utf8(char * src,int srclen,char * dsc,int dsclen)

當然libiconv也得使用交叉編譯

./configure --prefix=/home/libiconv --host=arm-none-linux-gnueabi

make

make install

引數含義不多做解釋,參考上文。

安裝完成從安裝目錄找到libiconv.so.2.5.1,複製到編譯目錄並改名為libiconv.so.2

從安裝目錄下找到iconv.h,複製到編譯目錄下

編寫makefile檔案如下

cc=/home/opt/friendlyarm/toolschain/4.4.3/bin/arm-linux-gcc

ccd=gcc

flags=-wl,-rpath=/tmp/sd/transfer -i/home/freetds-arm/include/ /home/freetds-arm/lib/libsybdb.a librt.so libiconv.so.2

flagsd=-i/home/freetds/include/ /home/freetds/lib/libsybdb.a -lrt -liconv

transfer : transfer.c transfer.h

$(cc) -o transfer -g transfer.c $(flags)

debug : transfer.c transfer.h

$(ccd) -o transferd -g transfer.c $(flagsd)

clean :

rm -rf *~ transfer transferd

執行make就可以得到transfer,這個是要放到板子上用

執行make debug就可以得到transferd,這個直接可以在ubuntu上用,方便除錯

為了方便在ubuntu12.04使用gdb除錯,增加了debug目標,freetds等的安裝方法參考上文,只需要去掉--host=arm-none-linux-gnueabi。

解釋下flags

-wl,-rpath=/tmp/sd/transfer表示程式執行的時候優先從這個路徑尋找依賴庫,如果不使用此項,會報libiconv.so.2找不到。

-i/home/freetds-arm/include/這裡指定freetds的標頭檔案路徑

/home/freetds-arm/lib/libsybdb.a指定freetds共享庫路徑

librt.so 這個是執行時庫,需要從開發板拷過來,也可以從交叉編譯器的安裝目錄下找到。(執行命令find / -name "*librt.so*" 即可找到)

libiconv.so.2 這個是libiconv的庫

flagsd,由於本機都是裝在/usr/lib下面的,所以直接使用-lrt連線librt.so,-liconv連線libiconv.so.2

最後將編譯目錄的libiconv.so.2、transfer放到板子的 /tmp/sd/transfer下

將ubuntu的/tmp/sd/transfer/freetds.conf拷貝到板子/tmp/sd/transfer下

這樣transfer就可以執行了

SSH 遠端訪問開發板

1,ssh secure shell 是一種能夠提供安全遠端登入會話的協議,是一種安全通道協議,主要用來實現字元介面的遠端登入,遠端複製等功能。ssh 協議對通訊雙方的資料傳輸進行了加密處理,其中包括使用者登入時輸入的使用者口令。2,兩種驗證方式 1 基於口令的安全驗證 只要你知道自己賬號和口令,就...

開發板 2440開發板

開發板 2440 開發板coall2440 開發板 高效能 samsung s3c2440a 處理器開發板 小區智慧型開發板 樓宇對講開發板 三星 2440 開發板 珠三角電子開發 小型終端開發板 手持裝置開發方案 編譯碼 2440 開發板 深圳 2440 開發板 單片板 硬體主機板 硬體底板 jt...

gdb遠端除錯目標開發板

本筆記基於韋東山的教程,目的通過gdb去除錯目標板上核心的執行。1.確保三者能夠ping通。2.修改目標板uboot命令引數 為3.輸入命令 nfs 0x31000000 10.196.169.work nfs root uimage bootm 0x31000000 使用命令之前把linux核心放...