[心得] SOC系統在Linux下驅動Hiface白棒的小心得

看板Headphone作者 (XD)時間10年前 (2013/09/27 17:21), 編輯推噓7(7015)
留言22則, 9人參與, 最新討論串1/1
好久沒有騙P幣了XD 整理一下目前比較好拿到的soc開發板與arm處理器架構。 ARM11 (armv6) 1. Raspberry Pi (Broadcom BCM2835 700MHz) Cortex-A7 (armv7) 1. Cubieboard2 (Allwinner A20 1GHz) Cortex-A8 (armv7) 1. Beagleboard (Ti OMAP3530 720MHz) 2. Beagleboard XM (Ti DM3730 1GHz) 3. Beaglebone (Ti AM3358 720MHz) 4. Beaglebone Black(Ti AM3359 1GHz) 5. FREESCALE (i.MX53 1GHz) 6. Cubieboard (Allwinner A10 1GHz) Cortex-A9 (armv7) 1. Pandaboard ES (Ti OMAP4460 1.2GHz) 2. Wandboard Solo,Dual,Quad (i.MX6 1~1.2GHz) 3. ORIGEN Quad (SAMSUNG Exynos4412 1.4GHz) Cortex-A15 (armv7) 1. Arndale Board (Exynos 5250 1.7GHz) 開發平台 http://www.dnaspirit.com/starrer/soc/SOC01.jpg
接下來要玩的wandboard ,是 Freescale i.MX6 ARM Cortex-A9 SOC 這是Quad Core的版子 XD。效能過剩阿。 http://www.dnaspirit.com/starrer/soc/IMG_4591.jpg
http://www.dnaspirit.com/starrer/soc/IMG_4593.jpg
[1] SOC平台的優勢 ● 低耗電,線性電源好準備 ● 智慧型手機人手一支,有效的跟桌上型系統整合, 透過DLNA,Throw 到SOC平台,播放內容。 ● 透過手機,控制SOC平台,抓取其它DLNA的內容播放。 [2] SOC與傳統DAC的媒介 ● USB介面是一個不錯的選擇,但是Linux的平台支援度不足是隱憂。 ● USB 轉 SPDIF 在兼顧品質下是不錯的方案。 [3] M2Tech白棒的解決方案 (準備了Pandaboard & Raspberry Pi的編譯方式 話說M2tech有放出Hiface白棒的Linux driver,而且還在很hot的github上。 也有很多前輩玩的很徹底了。在使用X86處理器的Linux套件去編繹hiface的驅動, 與在SOC平台的Linux編譯,理論上,應該要一樣的簡單, 但是現實上卻不是如此。我們看一下在github上的How to build it 的方式, apt-get install kernel-headers-$(uname -r) apt-get install build-essential apt-get install git git clone git://github.com/panicking/snd-usb-asyncaudio.git cd snd-usb-asyncaudio make 看起來是相當的簡單,不過在SOC的平台上, Embedded Linux是沒有kernel-header這個套件的, 除非套件本身native就有支援特定的soc平台。 本身我也有raspberry pi 並安裝了Raspbian, 試試看,如果下apt-get install kernel-headers-$(uname -r) 會出現甚麼: -------- pi@raspberrypi ~ $ sudo apt-get install kernel-headers-$(uname -r) Reading package lists... Done Building dependency tree Reading state information... Done E: Unable to locate package kernel-headers-3.6.11 E: Couldn't find any package by regex 'kernel-headers-3.6.11' pi@raspberrypi ~ $ --------- 因為SOC本身並沒有內建類似BIOS這樣的東西來處理開機的部分, 在存放資料的媒介,除了部分有內建eMMC,大部分都必須使用SD Card來開機, 因此必須仰賴X-Loader -> U-Boot or Vendor所提供的inhouse bootloader, 來載入linux的kernel,順利開機後,只要套件本身有支援特定的指令集如armv7, 也就意味著,可以使用網路安裝的方式來進行套件的安裝, 在最常用的Debian部分,原廠的網站有寫, Currently the Debian armhf port requires at least an ARMv7 CPU with Thumb-2 and VFP3D16. 也就是說,Raspberry Pi的SOC在使用armv6指令集狀況下, 必須有相對應的cross compiler來打造Debian這樣的套件, Raspbian也就是在原廠支援下,在wheezy armhf 的port上打造的套件。 以下我以個人比較常用的pandaboard es做為例子, 若要安裝debian在pandaboard es上, 有幾種方式,一種就是抓人家弄好的img檔案, 然後直接建立在新的SD卡上,直接開機,然後基本的東西就幾乎都裝好了。 另一種方式就是把先把linux kerenl 載入,然後跑netinstall, 這樣就可以打造自己想要的套件內容。 我的方式是使用RobertCNelson寫的netinstall來安裝Debian, https://github.com/RobertCNelson/netinstall 這種方式比起image檔案的方式是不方便一點, 但是套件的種類選擇比較多,如Ubuntu也支援。 例如想裝一些非stable的版本。 回到原題來,那如何成功的編譯這個驅動呢? 也就是說要拿到開機的linux同樣版本的kernel header即可, RobertCNelson同樣的有放出如何編譯linux-kernel的方式, 同樣在github上。 https://github.com/RobertCNelson/stable-kernel 如果是raspberry pi 可參考 https://github.com/raspberrypi/linux 因此在pandaboard es上就很簡單, --------------- 補充,其實是要先準備目前kernel的config檔案, zcat /proc/config.gz > ./config 最好以目前運行的版本為藍本。 git clone git://github.com/RobertCNelson/stable-kernel.git cd stable-kernel ./build_deb.sh --------------- 接下來下載hiface的driver git clone git://github.com/panicking/snd-usb-asyncaudio.git cd snd-usb-asyncaudio *由於hiface 預設會抓取/lib/modules/$(uname -r)/build為kernel source *因此必須建立一個連結到實際的kernel source位置。 ln -s /home/cswang/stable-kernel/KERNEL /lib/modules/$(uname -r)/build --------------- cswang@pandaes-debian:~/snd-usb-asyncaudio$ make make -C /lib/modules/3.7.10-x13/build SUBDIRS=/home/cswang/snd-usb-asyncaudio modules make[1]: Entering directory `/home/cswang/stable-kernel/KERNEL' CC [M] /home/cswang/snd-usb-asyncaudio/chip.o CC [M] /home/cswang/snd-usb-asyncaudio/pcm.o LD [M] /home/cswang/snd-usb-asyncaudio/snd-usb-hiface.o Building modules, stage 2. MODPOST 1 modules CC /home/cswang/snd-usb-asyncaudio/snd-usb-hiface.mod.o LD [M] /home/cswang/snd-usb-asyncaudio/snd-usb-hiface.ko make[1]: Leaving directory `/home/cswang/stable-kernel/KERNEL' --------------- 接下來把小白棒插入usb 用dmesg看一下 [11980.270660] usb 1-1.2.3: new high-speed USB device number 7 using ehci-omap [11980.403503] usb 1-1.2.3: New USB device found, idVendor=04b4, idProduct=930b [11980.410980] usb 1-1.2.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0 [11980.418914] usb 1-1.2.3: Product: USB-SPDIF [11980.423309] usb 1-1.2.3: Manufacturer: M2TECH [11980.428344] usb 1-1.2.3: config 0 descriptor?? [11980.433807] twl6030_usb twl6030_usb: phy not ready, deferring probe [11980.440521] platform twl6030_usb: Driver twl6030_usb requests probe deferral --------------- root@pandaes-debian:insmod snd-usb-hiface.ko root@pandaes-debian:/home/cswang/snd-usb-asyncaudio# aplay -l **** List of PLAYBACK Hardware Devices **** No protocol specified xcb_connection_has_error() returned true card 0: PandaBoardES [PandaBoardES], device 0: TWL6040 twl6040-legacy-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: OMAPHDMI [OMAPHDMI], device 0: HDMI omap-hdmi-hifi-0 [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 2: hiFace [hiFace], device 0: USB-SPDIF Audio [USB-SPDIF Audio] Subdevices: 1/1 Subdevice #0: subdevice #0 --------------- 表示白棒已經在pandaboard es 順利載入。 ---------------------- Raspberry Pi的Raspbian 下編譯hiface driver 注意,請務必檢查目前運行的Raspbian 的kernel版本, 若不是3.6.x ,須自行切換branch。 目前git上master的版本就是3.6.y git clone git://github.com/raspberrypi/linux.git cd linux 把目前運行的config檔案抓下來 zcat /proc/config.gz > ./.config make oldconfig make --------------- 接下來下載hiface的driver git clone git://github.com/panicking/snd-usb-asyncaudio.git cd snd-usb-asyncaudio *由於hiface 預設會抓取/lib/modules/$(uname -r)/build為kernel source *因此必須建立一個連結到實際的kernel source位置。 ln -s /home/pi/linux /lib/modules/$(uname -r)/build make --------------- [總結] ● 還有一些小細節,若實作上有問題,歡迎發問,我會儘量回達。 ● Raspberry Pi由於速度比較慢,所以編譯kernel要有等待的決心。 ● 只要拿的到可運作的Linux kernel source,幾乎就可以編譯成功hiface的模組。 ● hiface的linux driver只有支援 S32_LE 格式。 ● 與其它播放器或DLNA的組合,這也是一個頗大的議題。 ● 除了Pi之外,Pandaborad and Wandboard都有社群(Linaro)支援的 Android 4.2.2版本,Android 平台也是一個可以玩的部分。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.124.168.214

09/27 17:33, , 1F
有心得有推
09/27 17:33, 1F

09/27 17:35, , 2F
Linux推
09/27 17:35, 2F

09/27 19:29, , 3F
太強了....給推
09/27 19:29, 3F

09/27 20:05, , 4F
閱 地球修改M2tech hiface零件改最多 全鋰電池化 使用超優
09/27 20:05, 4F

09/27 20:06, , 5F
tcxo與脈衝變壓器 純銀導線 純銀WBT次世代同軸接頭的人
09/27 20:06, 5F

09/27 20:06, , 6F
旁邊路過留
09/27 20:06, 6F

09/27 20:26, , 7F
強大 推~
09/27 20:26, 7F

09/27 22:41, , 8F
有特殊的關鍵字就可以引出gg大 :D
09/27 22:41, 8F
※ 編輯: dnaspirit 來自: 1.34.220.61 (09/27 22:42)

09/28 03:59, , 9F
推用心分享,害我認真考慮要不要衝一台 Utilite Pro 試試看
09/28 03:59, 9F

09/28 14:07, , 10F
太猛了 推一個
09/28 14:07, 10F

09/29 03:55, , 11F
推Arch Linux Arm, 會自動下載缺少的header~
09/29 03:55, 11F

09/29 04:00, , 12F
另外可以參照這篇http://ppt.cc/6APv
09/29 04:00, 12F

09/29 04:01, , 13F
可以省去make的動作...
09/29 04:01, 13F

09/29 04:03, , 14F
另外CB2目前似乎debian kernel一直有bug,編譯會停掉..
09/29 04:03, 14F

09/29 04:04, , 15F
CB2用Arch linux Arm倒是可以成功編譯(kernel 3.3.30)
09/29 04:04, 15F

09/29 07:07, , 16F
這日本人寫的詳細的喔,感謝分享
09/29 07:07, 16F

09/29 07:09, , 17F
其實我也想過,不用整個compiler kernel應該是要可以
09/29 07:09, 17F

09/29 07:09, , 18F
果然還是有專門的指令可用
09/29 07:09, 18F

09/29 07:14, , 19F
CB2本來是想玩,不過他們釋出kernel source的方式頗原史
09/29 07:14, 19F

09/29 07:18, , 20F
上到git,用patch方式follow整個linux source tree
09/29 07:18, 20F

09/29 07:24, , 21F
Utilite Pro 是iMX6 Quad 跟Wandboard Quad同樣硬體
09/29 07:24, 21F

09/29 07:25, , 22F
不過輸出整個很豐富阿
09/29 07:25, 22F
文章代碼(AID): #1IHKuoYO (Headphone)