關注、星標公眾號,直達精彩內容
小飛哥自畢業以來,工作5年了,一直從事的都是嵌入式MCU層面的開發工作,還從未涉足過linux開發相關的領域,最近的一次應該是翻過《鳥哥的linux私房菜》,學著敲過一些命令行,僅此而已...

這不最近想看看linux開發到底咋搞(好像又分應用層、多BSP驅動層等多個方向),對于習慣了MCU開發的底層攻城獅來說,必須得是個點燈大師...

最近有幸結識創龍科技的黃工,扒拉來了一塊niubi的A40i工業評估板,就在這塊板子上學習學習
創龍科技 TLA40i-EVM 是一款基于全志科技 A40i 處理器設計的 4 核 ARM Cortex-A7 高 性能低功耗國產評估板, 每核主頻高達 1.2GHz, 由核心板和評估底板組成。

評估板接口資源豐富, 引出雙路網口、 雙路 CAN、 雙路 USB、 雙路 RS485 等通信接 口, 板載 Bluetooth、 WIFI、 4G(選配) 模塊, 同時引出 MIPI LCD、 LVDS LCD、 TFT LCD、 HDMI OUT、 CVBS OUT、 CAMERA、 LINE IN、 H/P OUT 等音視頻多媒體接口, 支持雙屏異顯、 Mali400 MP2 GPU, 1080P@45fps H.264 視頻硬件編碼、1080P@60fps H.264 視頻硬件解碼, 并支持 SATA 大容量存儲接口。


核心板采用 100%國產元器件方案,并經過專業的 PCB Layout 和高低溫測試驗證,穩 定可靠,可滿足各種工業應用環境。評估底板大部分元器件均采用國產方案, 方便用戶 快速進行產品方案評估與技術預研。

拍照環境+技術比較渣...大家勉強看哈,包裝、板子是十分精美的
包裝盒
開箱上板

核心板

配件清單

清單1-學習資料光盤:

清單2-4G天線:
比較遺憾的是,不帶4G模組...
清單3-DC電源

清單4-讀卡器

清單5-雙頭HDMI線

清單6-OTG轉接線

等等...配件齊全,基本調試夠用了





從硬件配置上看,有485、CAN、WiFi、4G、藍牙等,做一個工業網關、家居監控、儀表等是綽綽有余的


第一次接觸linux的板子,還是有一些發蒙的,好在創龍的開發資料以及技術支持都非常給力,即使如此還是走了一些彎路,上來就編譯linux內核去了...搞了兩天報了一堆錯,好在及時回頭,先從基本的搞起吧~

對剛接觸板子的小伙伴來說,還是按照官方提供的教程文檔,按照順序慢慢來

使用附贈的12v/2A電源適配器,連接開發板的DC電源口,并使用MicroUSB數據線連接開發板的串口到電腦,插入附贈的TF卡,并將撥碼開關調到SD卡啟動模式。

接入電源,并使用 Micro USB 線連接 PC 機和評估板的 USB TO UART0 調試串口

默認波特率率115200,使用終端調試助手mobaxterm打開所在串口號

相當于是板子的自檢功能,有些設備沒有插入,會報一些error,是不影響我們使用的

至此,系統啟動完成,為了以后可以不插SD卡也能啟動,也可以將系統一鍵固化到板載的ROM中。
終于看到了一些能夠看懂得了...
接下來在命令串口輸入命令行進行點燈測試,LED 設備節點為"/sys/class/leds/user-ledX/"目錄下的 brightness。

LED 燈默認是亮的,接下來我們通過命令行控制亮滅


echo?0?>?/sys/class/leds/user-led0/brightness


echo?1?>?/sys/class/leds/user-led0/brightness

上面介紹了通過命令控制LED開啟、關閉,我如果想要流水燈效果怎么辦呢?
接下來寫一段代碼來實現流水燈的效果,主要還是看官方提供的demo吧
(1) 預定義 LED 數組。程序由此數組獲取 LED 信息,數組信息必須為系統已有 LED 信 息,否則程序運行報錯。
/*?User-operable?LEDs?*/
static?char?*g_leds[]?=?{
????"/sys/class/leds/user-led0",
????"/sys/class/leds/user-led1",
????"/sys/class/leds/user-led2",
????"/sys/class/leds/user-led3"
};
(2) LED 亮滅操作和時間間隔。
????while?(!g_quit)?{
????????/*?Turn?on?LEDs?*/
????????for?(i?=?0;?i?????????????/*?Set?the?LED?brightness?value?to?1?to?turn?on?the?led?*/
????????????snprintf(cmd,?64,?"echo?1?>?%s/brightness",?g_leds[i]);
????????????if?(system(cmd)?!=?0)?{
????????????????fprintf(stderr,?"Error:?Failed?to?turn?on?%s\n",?g_leds[i]);
????????????????exit(EXIT_FAILURE);
????????????}
????????}
????????/*?Keep?the?LEDs?on?for?500?ms?*/
????????usleep(500?*?1000);
????????/*?Turn?off?LEDs?*/
????????for?(i?=?0;?i?????????????/*?Set?the?LED?brightness?value?to?0?to?turn?off?the?LED?*/
????????????snprintf(cmd,?64,?"echo?0?>?%s/brightness",?g_leds[i]);
????????????if?(system(cmd)?!=?0)?{
????????????????fprintf(stderr,?"Error:?Failed?to?turn?off?%s\n",?g_leds[i]);
????????????????exit(EXIT_FAILURE);
????????????}
????????}
????????/*?Keep?the?LEDs?off?for?500?ms?*/
????????usleep(500?*?1000);
????}
那么如何讓目標板執行這段代碼呢?
參照官方文檔《2-2-linux應用開發手冊》中開發案例說明,環境搭建等,按照教程文檔來就可以啦
如需重新編譯 Linux 常用開發案例,請將對應案例 src 目錄拷貝至 Ubuntu 工作目錄下。請先確保已參考 Linux 系統使用手冊編譯過 LinuxSDK,構建好 A40i 處理器對應的 GCC 編 譯器。然后進入 src 目錄執行如下命令,使用 LinuxSDK 開發包目錄下的 GCC 編譯器進行 案例編譯。編譯完成后,將在當前目錄下生成可執行文件。
Host#?CC=/home/你的系統名稱/A40i/lichee/out/sun8iw11p1/linux/common/buildroot/host/usr
/bin/arm-linux-gnueabihf-gcc?make
比如小飛哥的linux系統


將本案例 bin 目錄下的可執行程序 led_flash 拷貝至評估板文件系統,并在可執行程序 所在目錄執行如下命令運行程序,即可看到評估底板 LED 以 0.5s 的時間間隔進行閃爍。同時, 串口終端打印系統全部 LED 設備信息和程序當前控制的 LED 設備信息。
具體拷貝過程參照教程文檔,本次也不做具體說明了
可以看到,可執行文件已經拷貝到我們的開發板系統中了,接下來運行看看效果

可以看到,我們的兩個LED燈已經閃爍起來了

至此,算是搭建起來了基本的操作環境,中間廢了不少功夫,但好在沒有遇到解決不了的問題,還算比較順利吧,后面再慢慢與大家分享一些學習過程吧





??10分鐘教你玩轉freemodbus