前面完成了linux平台的移植,下面介绍部分调试手段,可以加快项目开发速度.先简介调试手段
( 1 ) 在uboot下使用TFTP下载linux内核.这样可以只要重启开发板就可以加载新的内核,方便你在进行内核移植时,随时测试新配置的内核.
( 2 ) 通过NFS挂载根文件系统.同理,也是只要重启开发板就可以挂载新的根文件系统,方便你在进行根文件系统移植时,随时测试新跟文件系统.
( 3 ) 通过telnet访问开发板.目的就是使用网络代替串口终端与开发板进行交互,因为有时设备没有外接串口到机壳,在进行现场调试时,使用网络基本可以不用开启设备外壳.
( 4 ) 通过NFS与调试计算机进行文件共享.配合telnet,就可完成通过网络就可以完成文件的传输等工作.
( 5 ) 通过ftp进行文件的传输.将开发板设置成ftp服务器,这样远程控制端只要使用遵守ftp协议的软件就可以与开发板进行文件的上传和下传,这个于NFS共享不同之处在于,ftp客户端软件丰富,而且自己的上位机软件也可以简单实现.
下面依次进行介绍
1. 配置计算机网络
我的电脑配置了两块网卡,一个为以太网接口ETH0,一个为WIFI接口WLAN0,我准备让WLAN0作为外网接口,可以上网;ETH0作为内网接口,连接开发板.
( 1 ) 让我的ETH0配置为静态IP,
sudo vi /etc/network/interfaces
auto eth0
iface eth0 inet static
address 192.168.1.101
netmask 255.255.255.0
这样我网段192.168.1.*的网络通信都走ETH0网卡了
( 2 ) 配置防火墙,让防火墙放过我的开发板
sudo ufw allow from 192.168.1.103
我的开发板地址为192.168.1.103,这样我就可以和开发板无障碍的通信了.
1. tftp下载linux内核
(1)配置pc机,开启TFTP服务
①安装相关软件包
sudo apt-get install tftpd (服务端)
sudo apt-get install tftp (客户端)
sudo apt-get install xinetd
②配置tftp服务
cd /etc/xinetd.d/
sudo vim tftp
输入
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = shirf
server = /usr/sbin/in.tftpd
server_args = -s /home/shirf/my_explore/tftp_file/
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
其中user=shirf为用户名,server_args = -s /home/shirf/my_explore/tftp_file/ 为tftp共享目录。
③建立tftp共享目录
cd /home/shirf/my_explore/
mkdir tftp_file/
这个目录的权限可以根据具体情况更改,我用的默认权限
④重启tftp服务
sudo /etc/init.d/xinetd restart
⑤测试
在tftp共享目录中,建立文件
vi hello_world
输入你的内容。
tftp 192.168.1.101
tftp> get hello_world
Received 14 bytes in 0.0 seconds
tftp>
这是查看你获取的文件,
tftp> q
退出
至此,tftp服务器配置完毕
2. nfs挂载根文件系统
PC端:
sudo apt-get install portmap nfs-kernel-server
sudo vi /etc/exports
/home/shirf/my_explore/nfs_file 192.168.1.103(rw,sync,no_root_squash)
我的共享文件夹为/home/shirf/my_explore/nfs_file 我只允许192.168.1.103访问我的共享文件夹
sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务
至此,通过网络挂载内核和根文件系统的pc端已经配置完毕,下面就是从uboot端配置成从网络下载内核和根文件系统了。
更改uboot环境变量为
"bootcmd=run bootcmd_net\0"
即可运行网络挂载部分。
这里我出了点问题,我使用直连线连接开发板和PC机,uboot通过tftp加载内核时,一直在超时,观察开发板端的指示灯,发现活动灯在闪烁,当通过pc端的wireshark发现无任何数据,判断可能需要交叉线,换了根交叉线,还是不行,后来只能讲开发板和pc机通过路由器(交换机也可)连接,就可以正常挂载内核和根文件系统。通过阅读手册,网络端现在之所以可以通过直连线(无任何交换设备)就可以实现连个两个pc机进行通信,是因为phy芯片的功能,phy芯片有自动探测和交叉收发线的功能,但是上述问题并未解决,暂时先使用路由器,后期有时间了在试试更改uboot源码看看是不是需要配置什么寄存器,因为同样的硬件在正常启动linux后,可以使用网络于pc机通信。
3. telnet与开发板交互
修改profile文件,添加开机自启动telnet服务,添加内容如下#start telnet
mkdir /dev/pts
mount -t devpts devpts /dev/pts
telnetd -l /bin/sh
echo
echo "start telnet ok."
我的profile就变为
# /etc/profile: system-wide .profile file for the Bourne shells
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export LD_LIBRARY_PATH=/lib:/usr/lib
#start telnet
mkdir /dev/pts
mount -t devpts devpts /dev/pts
telnetd -l /bin/sh
echo
echo -n "Processing /etc/profile... "
echo "Done"
echo
/ # netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
netstat: /proc/net/tcp6: No such file or directory
netstat: /proc/net/udp6: No such file or directory
netstat: /proc/net/raw6: No such file or directory
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
此时,我在我的计算机端使用telnet链接我的开发板
我的计算机ip为192.168.1.101,使用192.168.1.103即可完成远程访问开发板如下图
shirf@shirf-pc:/etc/xinetd.d$ ifconfig eth0
eth0 Link encap:Ethernet HWaddr 30:65:ec:19:2f:bf
inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::3265:ecff:fe19:2fbf/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19910 errors:0 dropped:0 overruns:0 frame:0
TX packets:21121 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1573165 (1.5 MB) TX bytes:15315686 (15.3 MB)
shirf@shirf-pc:/etc/xinetd.d$ telnet 192.168.1.103
Trying 192.168.1.103...
Connected to 192.168.1.103.
Escape character is '^]'.
/ # ls
bin etc linuxrc proc sys var
boot home lost+found root tmp
dev lib mnt sbin usr
/ #
最后就是退出终端使用
ctrl+],然后在输入q回车即可.
同时,也可使用带用户名称登录
建立登陆的用户文件夹,我的passwd登陆名称是imx6q,登陆后进入/home/imx6q/目录
mkdir home/imx6q
修改telnet登陆方式
#telnetd -l /bin/sh
telnetd -l /bin/login
此时使用PC机普通用户登陆,
shirf@shirf-pc:/$ telnet 192.168.1.103
Trying 192.168.1.103...
Connected to 192.168.1.103.
Escape character is '^]'.
(none) login: imx6q
Password:
mkdir: can't create directory '/dev/pts': File exists
mount: permission denied (are you root?)
Processing /etc/profile... Done
~ $
shirf@shirf-pc:/$ telnet 192.168.1.103
Trying 192.168.1.103...
Connected to 192.168.1.103.
Escape character is '^]'.
(none) login: root
Password:
mkdir: can't create directory '/dev/pts': File exists
mount: mounting devpts on /dev/pts failed: Device or resource busy
Processing /etc/profile... Done
~ #
4. nfs共享文件
( 1 ) PC端:
sudo apt-get install portmap nfs-kernel-server
sudo vi /etc/exports
/home/shirf/my_explore/nfs_file 192.168.1.103(rw,sync,no_root_squash)
我的共享文件夹为/home/shirf/my_explore/nfs_file 我只允许192.168.1.103访问我的共享文件夹
sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务
( 2 )开发板端mkdir /home/imx6q/nfs_flie
mount -t nfs -o nolock 192.168.1.101:/home/shirf/my_explore/nfs_file /home/imx6q/nfs_flie
我讲地址为:192.168.1.101,目录为/home/shirf/my_explore/nfs_file 挂在到我的/home/imx6q/nfs_flie文件夹上
这样就通过这个文件就可实现开发板于PC机的文件共享.5. ftp共享文件
( 1 )建立共享文件夹
mkdir /home/imx6q/ftp_file
chmod 777 ftp_file/
这样任意登陆用户都可使用ftp上传或下载这个文件夹中的数据了
( 2 )启动ftpd服务
tcpsvd 0 21 ftpd -w /home/imx6q/ftp_file &
使用图形界面登陆imx6q用户,输入密码,即可上传、下载、删除ftp文件夹中的数据了
至此,开发板开启ftp服务