本次實驗目的在于熟悉硬件板卡,了解今后實驗的基本配置眶俩、編程的基本手段和PC與板卡的通信手段莹汤。
實驗步驟
- 在PC上安裝好USB串口驅(qū)動和串口終端軟件;
- 按照圖紙要求颠印,將USB串口線與pcDuino連接好纲岭,并連接好以太網(wǎng)(如果打算采用WiFi抹竹,可不連接以太 網(wǎng))。如有 條件止潮,接上HDMI線和HDMI顯示器窃判;
- 給pcDuino上電哟楷,記錄啟動過程的輸出铃将;
- 從終端登陸pcDuino的Linux耻煤,配置網(wǎng)絡(luò)和/或WiFi矾麻,從pcDuino和PC兩端證明網(wǎng)絡(luò)已連接;
- 配置pcDuino的SSH悟泵,可嘗試采用各種不同的認證方式港华;
- 從PC通過SSH登陸pcDuino脾歇;
- 看到多個不同端口的登陸(本機鍵盤/屏幕橘沥、串口和SSH)窗轩,并運用Linux的write來互相通信。
- 配置嵌入式板卡上的SAMBA客戶端座咆,使它能訪問PC上共享的目錄;
- 嘗試各種與嵌入式板卡傳遞文件的方式并做比較:
- 通過SAMBA共享仓洼;
- 通過NFS共享(選做)介陶;
- 通過sftp傳遞;
- 通過串口XModem協(xié)議傳遞色建;
- 通過Dropbox共享(選做)哺呜。
- 選擇和安裝PC上的交叉編譯環(huán)境;
- 交叉編譯C語言的浮點運算程序到pcDuino上去運行箕戳,證明所編譯的程序是ARM的某残;
- 嘗試嵌入式板卡上的三個語言的開發(fā)環(huán)境:C/C++、Python和Java陵吸;
- 嘗試一種從PC遠程訪問嵌入式板卡圖形桌面的方式:x-window(通過SSH)玻墅、RDP或VNC。
實驗硬件
- Acadia板子一塊
- 顯示器一個
- PC機一臺壮虫,裝有ubuntu
- 路由器一個
- PL2303串口線一根
- 網(wǎng)線一根
- HDMI線一根
- 鼠標一個
- 鍵盤一塊
- 5V/1A電源一個
實驗流程
1. 虛擬連接圖
2. 實物連接圖
串口轉(zhuǎn)接線PL2303為左側(cè)的四股線澳厢,其中白線對應LX,黑線對應
GND囚似,綠線對應RX剩拢。左上角的兩個USB口分別接入鍵盤和鼠標,中間的HDMI口接入顯示器饶唤。網(wǎng)線與路由器連接徐伐,配置DHCP后能直接連上互聯(lián)網(wǎng)。
3. 啟動過程輸出
略
4. 串口登錄Acadia并獲取硬件數(shù)據(jù)
按教程的方式連上串口線后開機即可募狂。而電腦端為了接受串口發(fā)來的消息办素,需要有相關(guān)驅(qū)動的支持角雷。而在ubuntu下,直接使用包管理軟件進行安裝即可摸屠。
$ sudo apt-get install minicom
而后谓罗,通過系統(tǒng)內(nèi)核命令獲取PL2303的串口號。
$ dmesg | grep usb
...
pl2303 converter now attached to ttyUSB0
再使用minicom的命令將其定向到顯示的串口設(shè)備上季二。
$ sudo minicom -s
| Serial port setup |
A - Serial Device : /dev/ttyUSB0
F - Hardware Flow Control : No # 這個地方不改成No的話無法使用鍵盤輸入
ESC
| Save setup as dfl |
這時檩咱,minicom已經(jīng)監(jiān)視/dev/ttyUSB0,即當前連接的串口的消息胯舷。如果此時Acadia開著刻蚯,則串口會進入終端模式。
5. 配置網(wǎng)絡(luò)
Acadia有一個以太網(wǎng)接口桑嘶,接上帶有DHCP功能的路由器之后炊汹,只需要將相關(guān)配置改為自動獲取即可。
$ sudo vim /etc/network/interfaces
auto eth0
iface eth0 inet dhcp
$ sudo /etc/init.d/networking restart
$ ping www.baidu.com
PING www.a.shifen.com (115.239.211.112) 56(84) bytes of data.
64 bytes from 115.239.211.112: icmp_req=1 ttl=53 time=17.7 ms
64 bytes from 115.239.211.112: icmp_req=2 ttl=53 time=18.4 ms
......
6. ssh登錄與終端間通信
上節(jié)已經(jīng)配置好了網(wǎng)絡(luò)逃顶,則可以使用在同一局域網(wǎng)下的PC進行遠程ssh連接讨便。
上圖為ssh登錄的信息,下圖為串口終端打印出來的信息以政。經(jīng)對比可以看出霸褒,ssh登錄的確實是Acadia板子。
同時盈蛮,使用who命令可以看到當前登錄的所有用戶信息废菱。可以看出抖誉,ttymxc0為串口登錄的root殊轴,即為minicom所在的終端。而pts/2為ssh登錄的終端袒炉。
在獲取到了各個窗口的名稱之后旁理,可以通過write函數(shù)進行互相通信。
7. Samba文件共享
Samba軟件依然可以從ubuntu包管理器中找到梳杏,直接使用apt-get下載即可韧拒。
$ sudo apt-get install samba
$ sudo apt-get install smbclient
下載完成后,會在/etc目錄下生成一個配置文件夾為samba十性,而其中叛溢,主要的配置文件為smb.conf,修改其即可改變服務器行為劲适。
$ sudo apt-get install samba
$ sudo vim /etc/samba/smb.conf
[iisserver]
path = /media/Temp/code/html/iisserver
available = yes
browseable = yes
public = yes
writable = no
$ sudo /etc/init.d/samba reload
$ smbclient //localhost/iisserver
Enter lmuser's password:
Domain=[WORKGROUP] OS=[Unix] Server=[Samba 4.1.6-Ubuntu]
smb: \> ls
....
index.html A 51 Wed Mar 16 22:10:17 2016
xxx blocks of size xxx. xxx blocks available.
smb: \> exit
通過上述操作楷掉,可以通過smbclient訪問本機Samba服務器,確認配置文件內(nèi)所寫的內(nèi)容(iisserver)已經(jīng)進行了共享霞势。
在本機確認之后烹植,使用Acadia嘗試進行訪問斑鸦。通過上下兩個命令行對比可以看出,samba文件共享已經(jīng)成功搭建草雕。
8. 文件傳輸
8.1. SCP
scp命令只需要通過唯一定義一個網(wǎng)絡(luò)計算機上的地址即可進行賦值巷屿。
Scp通過ssh提供的安全數(shù)據(jù)鏈路進行數(shù)據(jù)傳輸,在保證了傳輸速率的同時也保證了安全性墩虹。而且scp操作不需要過多配置嘱巾,即配置好了ssh之后可以直接拿來當成本機上的cp命令使用,基本無學習成本诫钓。
但是一如cp命令旬昭,scp命令的缺點是對于多次多文件的操作支持比較差。
8.2. SFTP
sftp則是一個類似于遠程文件瀏覽器的程序菌湃。通過sftp问拘,用戶可以在通過ssh保證的安全數(shù)據(jù)鏈路中進行文件傳輸。而于scp不同的是惧所,sftp相當于一個小型的終端骤坐,可以進行文件的相關(guān)操作。
簡單的使用get命令則可以達到scp的效果下愈,即從服務器遠端下載了一個文件至本機或油。經(jīng)過驗證比對,文件無誤驰唬。但是sftp能做到的遠不止這些,具體的命令可以通過輸入help進行查看腔彰。
sftp在遠程文件處理這方面做得很好叫编,但是就少量文件拷貝而言,對比與scp還是相對繁瑣霹抛,在使用中sftp與scp互有優(yōu)劣搓逾,需要結(jié)合實際進行操作。
8.3. Samba文件共享
一如前面7.所提供的方法杯拐,可以在Acadia上也同時配出一個Samba文件共享霞篡。
如同sftp一般,Samba也有一個可以進行文件操作的客戶端端逼,但是其中區(qū)別很大朗兵。
sftp的客戶端是屬于有用戶權(quán)限的客戶端,可以直接在文件級別上進行操作顶滩。而Samba的客戶端則是相當于一臺虛擬機余掖,所有的操作均受到samba程序以及配置文件的限制。
但是Samba作為文件傳輸?shù)囊环N方式礁鲁,有其最大的一個優(yōu)點盐欺,即匿名性赁豆。操作者從sftp登錄遠程電腦所必須的是能夠通過ssh登錄。而在這種情況下冗美,操作者相當于擁有了登錄用戶的權(quán)限魔种,而對于某些情況下,這種大權(quán)限必須得加入安全性的考量中粉洼。
而Samba客戶端在配置文件中可以允許某個文件夾的匿名訪問节预,則相當于提供了一個小權(quán)限的文件訪問方式,相比于sftp的全開放式做法略微保守但是保證了安全漆改。
但是心铃,Samba共享的缺點也比較突出,就是配置相較于scp與sftp略為麻煩挫剑,且需要主機主動進行配置去扣,適用于需要長期提供服務的場合。
9. 交叉編譯
首先樊破,依然是環(huán)境的配置愉棱,ubuntu官方已經(jīng)給出一個交叉編譯的包,直接使用包管理軟件獲取即可哲戚。
$ sudo apt-get install gcc-arm-linux-gnueabihf
待下載完成后奔滑,可以開始嘗試著使用交叉編譯來在PC機上編譯能夠在Acadia上運行的程序。
$ vim hello.c
#include <stdio.h>
int main(){
printf("Hello World!\n");
return 0;
}
$ gcc hello.c
$ file a.out
a.out: ELF 64-bit LSB executable, x86-64, ........
$ ./a.out
Hello World!
$ arm-linux-gnueabihf-gcc hello.c
$ ./a.out
zsh: exec format error: ./a.out
$ file a.out
a.out: ELF 32-bit LSB executable, ARM, ......
$ scp a.out root@192.168.xxx.xxx:/home/linaro
...
a.out 100% ....
root@Acadia:/home/linaro# ./a.out
Hello World!
以上便是一次完整的交叉編譯的過程顺少,在x86的PC機上成功編譯出了能在ARM芯片上運行的程序朋其。
10. 嵌入式板卡開發(fā)環(huán)境
10.1 C語言
root@Acadia:/root/tmp# vim hello.c
#include <stdio.h>
#include <time.h>
int main(){
printf("Hello Acadia! At %lu\n", time(NULL));
return 0;
}
root@Acadia:/root/tmp# gcc hello.c
root@Acadia:/root/tmp# ./a.out
Hello Acadia! At 1458229866
10.2 python
root@Acadia:/root/tmp# vim first.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'lmzqwer2'
import os
import sys
print 'Hello World'
print os.getcwd()
print sys.platform
print os.system('uname -a')
root@Acadia:/root/tmp# python first.py
Hello World
/root/tmp
linux2
Linux Acadia 3.0.35-2666-gbdde708 .......
11. VNC遠程圖形桌面
依然還是使用apt-get包管理工具獲取X11vnc服務器。
$ sudo apt-get install X11vnc
$ X11vnc –storepasswd
$ sudo apt-get install vncviewer
$ vncviewer 192.168.xxx.xxx
......
后記
挑了一個Acadia作為實驗板之后脆炎,猛地發(fā)現(xiàn)沒有串口線XD梅猿。然后就拖啊拖啊拖啊的,一直拖到了deadline秒裕。
整個實驗做下來感覺和上學期操作系統(tǒng)試驗帶給我的感覺一樣袱蚓,就是新的東西很多。許多原本很少聽過的東西几蜻,現(xiàn)在在實驗當中要進行使用喇潘,不得不現(xiàn)場學習。出了錯就使用百度梭稚,使用google颖低,看文檔。不過唯一的不同或許是在硬件方面搜索引擎能夠搜索到的干貨會少一些哨毁,要從中篩選自己所需的東西還需要一些時間枫甲。