imx6q 网络调试方式汇总

时间:2021-04-02 00:15:04

前面完成了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

重启设备reboot.

/ # 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

开启了一个端口号为23的tcp服务器,并且处于监听状态.

此时,我在我的计算机端使用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

使用/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

~ $

使用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: 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服务