電子方案開發(fā)供應(yīng)鏈平臺(tái)
移動(dòng)端
方案網(wǎng)小程序
方案網(wǎng)手機(jī)端
加小編微信入群
發(fā)布時(shí)間:2010-10-21 閱讀量:1216 來(lái)源: 發(fā)布人:
在S3C2410上移植bluetooth(藍(lán)牙)(一)
http://www.d28365.cn/article/articleinfo/id/80007475
在S3C2410上移植bluetooth(藍(lán)牙)(二)
http://www.d28365.cn/article/articleinfo/id/80007476
完成了在普通red hat上的安裝,熟悉了藍(lán)牙協(xié)議棧一些基本的東西,下面的任務(wù)就是把協(xié)議棧搬到開發(fā)板上了。
第一步當(dāng)然是內(nèi)核了,由于華恒的內(nèi)核代碼改過(guò),我也不知道從bluez上下載的patch能不能使用,試試看了,只好。
# cd /HHARM2410/kernel
# gzip -dc ~/patch-2.4.18-mh15.gz | patch -p1
# find ./ -name '*rej'
./fs/cramfs/inode.c.rej
不 好,有文件不能patch,看看是針對(duì)cramfs文件系統(tǒng)的patch,我也不清楚為什么bluez的patch會(huì)修改到cramfs,不過(guò)我想問(wèn)題應(yīng) 該不大。內(nèi)核源代碼關(guān)于bluetooth的部分華恒應(yīng)該沒(méi)有改過(guò),因此patch的主要部分應(yīng)該是沒(méi)有問(wèn)題的。如果內(nèi)核編譯后發(fā)生問(wèn)題,我想大概也只有 把內(nèi)核代碼翻出來(lái)看了。
先就這樣了,用用試試看好了。與普通pc上的類似,只不過(guò)有些是m的現(xiàn)在統(tǒng)統(tǒng)為y了。我的配置關(guān)于Bluez的部分設(shè)置為:
#
# Bluetooth support
#
CONFIG_BLUEZ=y
CONFIG_BLUEZ_L2CAP=y
# CONFIG_BLUEZ_SCO is not set
CONFIG_BLUEZ_RFCOMM=y
CONFIG_BLUEZ_RFCOMM_TTY=y
CONFIG_BLUEZ_BNEP=y
CONFIG_BLUEZ_BNEP_MC_FILTER=y
CONFIG_BLUEZ_BNEP_PROTO_FILTER=y
# CONFIG_BLUEZ_HIDP is not set
#
# Bluetooth device drivers
#
CONFIG_BLUEZ_HCIUSB=y
# CONFIG_BLUEZ_HCIUSB_SCO is not set
# CONFIG_BLUEZ_HCIUART is not set
# CONFIG_BLUEZ_HCIBFUSB is not set
# CONFIG_BLUEZ_HCIDTL1 is not set
# CONFIG_BLUEZ_HCIBT3C is not set
# CONFIG_BLUEZ_HCIBLUECARD is not set
# CONFIG_BLUEZ_HCIBTUART is not set
# CONFIG_BLUEZ_HCIVHCI is not set
device部分就設(shè)了個(gè)USB的,其他的就不設(shè)置了。
下面繼續(xù)make dep;make zImage的常規(guī)過(guò)程,OK,沒(méi)有發(fā)生編譯問(wèn)題,可以稍微舒口氣了。
下面要移植Bluez的基礎(chǔ)庫(kù)了,在Redhat 9下執(zhí)行
# ldd /usr/lib/libbluetooth.so.1.0.17
???? libc.so.6 => /lib/libc.so.6 (0x4002c000)
??? /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
發(fā)現(xiàn)沒(méi)有依賴什么莫名其妙的庫(kù),應(yīng)該換個(gè)編譯器就可以了,configure一下就可以了。我的配置命令很簡(jiǎn)單:???????????????
# ./configure --host=armv4l --prefix=/HHARM2410/applications/bluezport/libs CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc CPP=/opt/host/armv4l/bin/armv4l-unknown-linux-cpp AR=/opt/host/armv4l/bin/armv4l-unknown-linux-ar STRIP=/opt/host/armv4l/bin/armv4l-unknown-linux-strip RANLIB=/opt/host/armv4l/bin/armv4l-unknown-linux-ranlib
LD=/opt/host/armv4l/bin/armv4l-unknown-linux-ld
# make
# make install
OK了,到了/HHARM2410/applications/bluezport/libs下看看,我也不清楚為什么,居然只有.a和.la的靜態(tài)庫(kù),沒(méi)有動(dòng)態(tài)庫(kù)。只好自己動(dòng)手,到bluz-libs-2.17/src/下,自己編譯動(dòng)態(tài)庫(kù):
# /opt/host/armv4l/bin/armv4l-unknown-linux-gcc -shared -o libbluetooth.so.1.0.17 bluetooth.o hci.o sdp.o
再做兩個(gè)符號(hào)連接
# ln -s libbluetooth.so.1.0.17 libbluetooth.so
# ln -s libbluetooth.so.1.0.17 libbluetooth.so.1
好了,庫(kù)交叉編譯完畢,mv到/HHARM2410/application/bluezport/libs/lib文件夾下就可以了。
接著移植Bluez的工具集。與庫(kù)類似,先看一下各個(gè)程序需要用到什么庫(kù),比如:
#ldd /usr/sbin/hcid
??? libbluetooth.so.1 => /usr/lib/libbluetooth.so.1 (0x40035000)
??? libc.so.6 => /lib/libc.so.6 (0x40042000)
??? /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
挨 個(gè)試試需要用的工具,發(fā)現(xiàn)需要的庫(kù)華恒和Bluez都提供了,應(yīng)該換個(gè)編譯器編譯一下就可以了。編譯之前我為了到板子上與我自己的手機(jī)連接方便修改了 bluez-utils-2.17/hcid/security.c文件,在init_security_data函數(shù)中的設(shè)置默認(rèn)的密碼,非常簡(jiǎn)單地改 了兩行:
?????? strcpy(hcid.pin_code, "123");
?????????????? hcid.pin_len = 3;
然后configure我想就行了,我的configure設(shè)置為:
# ./configure --prefix=/HHARM2410-R3/applications/bluezport/utils --includedir=/HHARM2410-R3/applications/bluezport/libs/include --libdir=/HHARM2410-R3/applications/bluezport/libs/lib --with-bluez=/HHARM2410-R3/applications/bluezport/libs --disable-test --disable-cups --disable-pcmia --host=armv4l CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gcc CPP=/opt/host/armv4l/bin/armv4l-unknown-linux-cpp AR=/opt/host/armv4l/bin/armv4l-unknown-linux-ar STRIP=/opt/host/armv4l/bin/armv4l-unknown-linux-strip RANLIB=/opt/host/armv4l/bin/armv4l-unknown-linux-ranlib LD=/opt/host/armv4l/bin/armv4l-unknown-linux-ld
# make
我在這步make的時(shí)候出現(xiàn)了一點(diǎn)小錯(cuò)誤,好像是說(shuō)PATH_MAX沒(méi)有定義,這個(gè)是LINUX設(shè)置的存放路徑名緩沖區(qū)的最大長(zhǎng)度。應(yīng)該是少包含了一個(gè)頭文件造成的。我沒(méi)有去仔細(xì)考究,就在當(dāng)前文件下的config.h中添加了三行:
? #ifndef PATH_MAX
? #define PATH_MAX 4095/* PAGE_SIZE - 1 */
? #endif
采用簡(jiǎn)單粗魯?shù)奶砑佣x的方式。再make,通過(guò)。
# make install
好了,工具集都在/HHARM2410-R3/applications/bluezport/util下了。
最后,由于在PC的LINUX下的默認(rèn)pin_helper /usr/bin/bluepin是用python寫的代碼,在2410上當(dāng)然不能用了,所以要自己寫一個(gè)pin_helper的程序。翻翻 /usr/bin/bluepin的代碼以及hcid/security.c的代碼,事實(shí)上hcid進(jìn)程在驗(yàn)證PIN code的時(shí)候開了一個(gè)pipe指向pin_helper進(jìn)程的標(biāo)準(zhǔn)輸出,pin_helper進(jìn)程向用戶詢問(wèn)PIN code,如果用戶輸入密碼XXXX就以"PIN:XXXX"的形式寫到標(biāo)準(zhǔn)輸出中去,如果用戶reject就寫個(gè)"ERR"回去。
我以一種最簡(jiǎn)單的方式實(shí)現(xiàn)pin_helper程序,即固定地寫一個(gè)code回去,比如123,犧牲安全性。
用腳本實(shí)現(xiàn)就是:
#!/bin/sh
echo "PIN:123"
用C實(shí)現(xiàn)一個(gè)就是:
#include
int main(int argc, char* argv[])
{
?? printf("PIN:123");
}
交叉編譯成my_pin_helper再放到板子的/usr/bin下,那么就可以把板子的hcid.conf修改成:
pin_helper /usr/pin/my_pin_helper
后來(lái),我在板子上也用MiniGUI寫了一個(gè)pin_helper,也挺簡(jiǎn)單的。
好了,一切準(zhǔn)備完畢,做好ramdisk,記得在/dev下mknod幾個(gè)rfcomm,放到板子上,可以運(yùn)行!
插上USB適配器,連模塊都不用probe
# hciconfig hci0 up
# hcid -f /etc/bluetooth/hcid.conf
# hciconfig -a
看到設(shè)備了,其他的運(yùn)行都OK。結(jié)合ppp就可以用手機(jī)上網(wǎng)了~~
兩腳晶振必為無(wú)源晶振,不管是插件晶振或貼片晶振
隨著科技的發(fā)展,尤其是移動(dòng)設(shè)備、可穿戴技術(shù)以及物聯(lián)網(wǎng)(IoT)領(lǐng)域的崛起,智能化產(chǎn)品越來(lái)越趨向于便攜式,因此對(duì)晶振的小型化的需求也逐漸增加。
24MHz無(wú)源晶振具有多種重要作用
汽車行業(yè)正處在電動(dòng)化和智能化的轉(zhuǎn)型過(guò)程中,而半導(dǎo)體企業(yè)站在這一變革的最前沿
市場(chǎng)對(duì)工業(yè)應(yīng)用的需求與日俱增,數(shù)據(jù)采集系統(tǒng)是其中的關(guān)鍵設(shè)備。它們通常用于檢測(cè)溫度、流量、液位、壓力和其他物理量,隨后將這些物理量對(duì)應(yīng)的模擬信號(hào)轉(zhuǎn)換為高分辨率的數(shù)字信息,再由軟件做進(jìn)一步處理。此類系統(tǒng)對(duì)精度和速度的要求越來(lái)越高,這些數(shù)據(jù)采集系統(tǒng)由放大器電路和模數(shù)轉(zhuǎn)換器(ADC)組成,其性能對(duì)系統(tǒng)具有決定性的影響。