嵌入式系统实验一
日期:2016-3-19
一、实验目的
1.了解嵌入式板卡一般情况;
2.熟悉pcDuino的供电等接线方式;
3.复习Linux启动过程(操作系统课);
4.复习通过Linux获得硬件数据(操作系统课)
5.熟练掌握串口在PC上的使用;
6.熟练掌握Linux的以太网和WiFi配置;
7.熟练掌握Linux的SSH配置;
8.熟练掌握PC上的SSH软件。
9.掌握嵌入式板卡和PC建立文件共享的方式;
10.寻找和安装交叉编译环境,理解交叉编译;
11.熟悉嵌入式板卡的Linux下的编程环境;
12.了解远程访问嵌入式板卡图形桌面的方式。
二、实验器材
硬件
•实验主板一块;
•5V/1A电源一个;
•microUSB线一根;
•USB-TTL串口线一根(FT232RL芯片或PL2303芯片)。
以下为自备(可选)器材:
•PC(Windows/Mac OS/Linux)一台;
•以太网线一根(可能还需要路由器等);
•HDMI显示器;
•HDMI线;
•USB键盘/鼠标(无线);
•USB Hub,推荐自带供电的类型。
软件
•PC上的USB-TTL串口线配套的驱动程序;
•PC上的串口终端软件,如minicom、picocom、putty等;
•PC上的SSH软件,如putty等。
•交叉编译软件
三、实验步骤
1. 画出你所实际实施的连接示意图;
1. 给出实际拍摄的板卡连接照片;
1. 在PC上安装好USB串口驱动和串口终端软件;
2. 给出拷贝得到的pcDuino启动时的输出文字,并逐行解释;
U-Boot 2009.08 (Dec 25 2014 - 21:37:33)//启动时间
CPU: Freescale i.MX6 family TO1.2 at 792MHz //CPU芯片型号和频率
Thermal sensor with ratio = 175 //传感器比热率
Temperature: 30 C, calibration data 0x5524c869
mx6q pll1: 792MHz
mx6q pll2: 528MHz
mx6q pll3: 480MHz
mx6q pll8: 50MHz
ipg clock : 66000000Hz
ipg per clock : 66000000Hz
uart clock : 80000000Hz
cspi clock : 60000000Hz
ahb clock : 132000000Hz
axi clock : 264000000Hz
emi_slow clock: 132000000Hz
ddr clock : 528000000Hz
usdhc1 clock : 198000000Hz
usdhc2 clock : 198000000Hz
usdhc3 clock : 198000000Hz
usdhc4 clock : 198000000Hz
nfc clock : 24000000Hz
Board: i.MX6Q-SABRESD: unknown-boardBoard: 0x63012 [POR ]
Boot Device: MMC //boot设备为MMC
I2C: ready
DRAM: 1 GB //内存大小
MMC: FSL_USDHC: 0,FSL_USDHC: 1,FSL_USDHC: 2,FSL_USDHC: 3
In: serial
Out: serial
Err: serial
config_ipu_di_clk: freq = 148500000.
wait for pll5 lock.
config_ipu_di_clk: set pll5 clock to297000000Hz.
Found PFUZE100! deviceid=10,revid=11
Net: got MAC address from IIM: 00:00:00:00:00:00
FEC0 [PRIME]
Hit any key to stop autoboot: 0
mmc3(part 0) is current device
//读取MMC
MMC read: dev # 3, block # 2048, count10240 ... 10240 blocks read: OK
## Booting kernel from Legacy Image at10800000 ...//linux镜像参数
Image Name: Linux-3.0.35-2666-gbdde708//内核镜像名
Image Type: ARM Linux KernelImage (uncompressed)//镜像类型
Data Size: 4422312 Bytes = 4.2 MB//数据大小
Load Address: 10008000//数据加载地址
Entry Point: 10008000//入口点
Verifying Checksum ... OK
Loading Kernel Image ... OK//内核镜像加载成功
OK
Starting kernel ... //启动内核
Uncompressing Linux... done, booting thekernel.
Linux version 3.0.35-2666-gbdde708(root@ubuntu) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #218 SMPPREEMPT Thu Dec 18 22:32:36 PST 2014
CPU: ARMv7 Processor [412fc09a] revision10 (ARMv7), cr=10c53c7d
//CPU型号为ARMv7兼容的ARMv10处理器
CPU: VIPT nonaliasing data cache, VIPTaliasing instruction cache
//CPU采用VIPT的非对齐数据缓存和对齐指令缓存
Machine: Freescale i.MX 6Quad/DualLite/SoloSabre-SD Board
//机器型号为飞思卡尔MX
Memory policy: ECC disabled, Data cachewritealloc
//内存策略为非ECC的数据缓存写回
CPU identified as i.MX6Q, silicon rev 1.2
PERCPU: Embedded 7 pages/cpu @8c008000s5472 r8192 d15008 u32768
Built 1 zonelists in Zone order, mobilitygrouping on. Total pages: 194560
Kernel command line:console=ttymxc0,115200 root=/dev/mmcblk0p1 rootwait fec_mac=4c:53:0e:22:69:d4video=mxcfb0:dev=hdmi,1920x1080M@60,if=RGB24,bpp=32 fbmem=28M
PID hash table entries: 4096 (order: 2,16384 bytes)//PID哈希表项最多4096
Dentry cache hash table entries: 131072(order: 7, 524288 bytes)
Inode-cache hash table entries: 65536(order: 6, 262144 bytes)
Memory: 512MB 256MB = 768MB total//内存大小
Memory: 764648k/764648k available, 283928kreserved, 0K highmem
Virtual kernel memory layout://虚拟内存布局
vector : 0xffff0000 -0xffff1000 ( 4 kB)
fixmap : 0xfff00000 -0xfffe0000 ( 896 kB)
DMA : 0xf4600000 -0xffe00000 ( 184 MB)
vmalloc : 0xc0800000 - 0xf2000000 ( 792 MB)
lowmem : 0x80000000 -0xc0000000 (1024 MB)
pkmap : 0x7fe00000 -0x80000000 ( 2 MB)
modules : 0x7f000000 - 0x7fe00000 ( 14 MB)
.init : 0x80008000 - 0x8003e000 ( 216 kB)
.text : 0x8003e000 - 0x80b93ca8 (11608 kB)
.data : 0x80b94000 - 0x80bff600 ( 430 kB)
.bss : 0x80bff624 - 0x80c58d0c (358 kB)
SLUB: Genslabs=13, HWalign=32, Order=0-3,MinObjects=0, CPUs=4, Nodes=1
Preemptible hierarchical RCUimplementation.
NR_IRQS:624
MXC GPIO hardware
sched_clock: 32 bits at 3000kHz,resolution 333ns, wraps every 1431655ms
arm_max_freq=1GHz
MXC_Early serial console at MMIO 0x2020000(options '115200')
bootconsole [ttymxc0] enabled
Console: colour dummy device 80x30
Calibrating delay loop... 1581.05 BogoMIPS(lpj=7905280)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok//CPU测试写一致性ok
hw perfevents: enabled with ARMv7Cortex-A9 PMU driver, 7 counters available
CPU1: Booted secondary processor
CPU2: Booted secondary processor
CPU3: Booted secondary processor
Brought up 4 CPUs
SMP: Total of 4 processors activated(6324.22 BogoMIPS).
print_constraints: dummy:
NET: Registered protocol family 16
******************此处行数太多省略******************
kjournald starting. Commit interval 5 seconds
EXT3-fs (mmcblk0p1): using internaljournal
EXT3-fs (mmcblk0p1): mounted filesystemwith writeback data mode
VFS: Mounted root (ext3 filesystem) ondevice 179:1.
//虚拟文件系统挂载在ext3设备上
Freeing init memory: 216K
//释放内核未使用内存
ov5642_read_reg:write reg error:reg=300a
ov5640_read_reg:write reg error:reg=300a
ov5640_read_reg:write reg error:reg=300a
Last login: Thu Jan 1 08:00:05 CST 1970 on tty1//上一次登陆时间
Welcome to Linaro 12.11 (GNU/Linux3.0.35-2666-gbdde708 armv7l)
*Documentation: https://wiki.linaro.org/
3. 如何通过Linux获得硬件数据,截屏给出获得的硬件数据,如CPU型号、时钟频率、内存大小等;
时钟信号在启动文字那里。
4. 给出你的网络配置参数,截屏给出从pcDuino和PC两端得到的网络已连接的证明;
网络配置参数:
从pcduino证明网络已连接:成功Ping百度
从pc端证明板子网络已连接:cmd中ping pcduino的内网ip地址
5. 给出你的SSH配置文件,并解释其中内容;
Host * //选项“Host”只对能够匹配后面字串的计算机有效。“*”表示所有的计算机 # ForwardAgent no //设置连接是否经过验证代理(如果存在)转发给远程计算机 # ForwardX11 no //设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set) # ForwardX11Trusted yes //设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)。 # RhostsRSAAuthentication no //设置是否使用用RSA算法的基于rhosts的安全验证。 # RSAAuthentication yes //设置是否使用RSA算法进行安全验证。 # PasswordAuthentication yes # HostbasedAuthentication no //是否在HostbasedAuthentication过程中忽略用户的 ~/.ssh/known_hosts文件。默认值是"no"。为了提高安全性,可以设为"yes" # GSSAPIAuthentication no //是否允许使用基于 GSSAPI的用户认证 # GSSAPIDelegateCredentials no # GSSAPIKeyExchange no # GSSAPITrustDNS no # BatchMode no //如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入口令的时候,这个选项对脚本文件和批处理任务十分有用 # CheckHostIP yes //设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes” # StrictHostKeyChecking ask //如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接。 # IdentityFile ~/.ssh/identity //设置从哪个文件读取用户的RSA安全验证标识 # IdentityFile ~/.ssh/id_rsa # IdentityFile ~/.ssh/id_dsa # Port 22 //设置连接到远程主机的端口。 # Protocol 2,1 //使用SSH2和SSH1协议 # MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160 # EscapeChar ~ //设置escape字符 # Tunnel no //是否允许使用基于密码的认证 # GSSAPIDelegateCredentials no //Gssapi认证 |
6. 存在多个登陆时,如何看到不同端口的登陆,给出截屏结果;
Write通信
ssh的终端输入:writeroot tty1
再输入hello
PC 上的 serial 终端会收到 hello
7. 给出嵌入式板卡上的SAMBA配置文件内容,并逐行解释;
/*全局配置*/
[global]
workgroup = mabin //类似于在Windows中显示的工作组名称
netbios name = mabin-samba //被netbios解析出来的计算机名
server string = sambatestserver //服务器说明
security = share //security是登录和验证方式,设置为share可以匿名访问;而如果是user这种验证方式的话,就需要用户名和密码
[share] //在Windows中显示出来的共享目录名
path = /var/samba //共享目录的路径
writeable = yes //是否可写
browseable = yes //是否可浏览
guest ok = yes //设置匿名用户以guest身份登录
8. 给出用各种方式传递文件的过程,并从易用性、速度、安全等方面做比较;
Samb:
在window中的share文件夹中加入samb.test,可以发现在linux中多出来了这个文件,说明文件传输成功。
sftp:
然后就可以用sftp命令在pc和acadia之间传递文件了。
| SAMBA | Sftp |
易用性 | 较为简便,但是只能针对特定文件夹 | 简便 |
速度 | 较慢 | 较快 |
安全 | 基于SSL协议加密samba传输数据保证安全但相比来看安全性还是有差距 | Secure File Transfer Protocol的缩写,安全文件传送协议。可以为传输文件提供一种安全的加密方法 |
9. 给出你所选择的交叉编译环境的情况:来源、安装过程等;
因为在windows中交叉编译的软件包比较难找,所以这一步转到linux系统里做了。
然后把a.out通过samb共享到acadia板子上:
10.给出交叉编译的程序的情况,并证明它是ARM/MIPS的可执行文件;
在acadia上交叉编译成功:
但在linux系统中运行的话就会提示是二进制arm文件,证明是可执行文件
11.给出嵌入式板卡本机开发环境的情况,给出一或两种语言编程的例子和结果;
Java:
C:
12.给出你尝试的远程图形桌面的方式:嵌入式板卡端的配置方法,PC端软件的获得,使用结果截屏等。
①在acadia中配置和启动xllvnc:
②在windows中启动vnc-viewer,输入ip和密码登陆:
四、实验感想
通过这一次的实验,熟悉了acadia的一些基本操作,因为是第一次接触,所以这一次的实验过程中还是遇到了很多问题,比如无线网络的共享还有文件传递交叉编译等。一开始只能ping内网,后来发现是域名解析服务器配置有问题,在resolv.conf中添加自己对应的DNS才成功,Apt-get install vsftbd的时候报错找不到/mnt/uImage,所以最后是手动建立了一个软链接才成功,然后apt-getupdate的时候也换了很多个源才成功,主要是网上的资料基本上都没有找到专门关于acadia的,各种pcduino板子的情况都不太一样,所以查资料的时候也花费了蛮久,但是最后解决了还是蛮开心的。