EBAZ4205 ZYNQ 7Z010原始LINUX系统的修改与使用
最近收了个EBAZ4205矿机控制卡,某鱼上非常便宜,手上只有串口调式器,没有JTAG调试器,也没有改造板子,只是焊了串口连接的引脚,上电串口能打印信息,也能进系统,但是系统还有密码。想玩又没有其他工具怎么办。游荡于各个网页上的相关论坛和资料,终于找到了突破口,可以先玩玩ARM的linux应用开发。关于板子的相关资料网上已经比较丰富了。本文主要参考了以下论坛和帖子的内容,再此向这些大拿表示感谢表示。
https://whycan.cn/t_2297.html
https://blog.csdn.net/long0801/article/details/77368205
https://www.cnblogs.com/findumars/p/5869608.html
1、备份原始系统
1、链接调试串口,上电查看启动信息,记录分区情况
上电后,串口会打印启动信息,其中可以看到如下相关信息:
9 ofpart partitions found on MTD device pl35x-nand
Creating 9 MTD partitions on "pl35x-nand":
0x000000000000-0x000000300000 : "nand-fsbl-uboot"
0x000000300000-0x000000800000 : "nand-linux"
0x000000800000-0x000000820000 : "nand-device-tree"
0x000000820000-0x000001220000 : "nand-rootfs"
0x000001220000-0x000002220000 : "nand-jffs2"
0x000002220000-0x000002a20000 : "nand-bitstream"
0x000002a20000-0x000006a20000 : "nand-allrootfs"
0x000006a20000-0x000007e00000 : "nand-release"
0x000007e00000-0x000008000000 : "nand-reserve"
这就是nand分区结构,下面就开始对这些分区进行备份,以防不时之需。
2、重新启动,按‘d’进入U-BOOT
Hit 'd' to stop autoboot(eric): 0
zynq-uboot>
3、修改网络配置
setenv serverip 192.168.0.139
setenc ipaddr 192.168.0.99
分别指定服务器ip和板子的ip,根据自己的网络情况来设置。因为nand无法保存环境变量,设置玩不要重启。
4、测试网络连接
zynq-uboot> ping 192.168.0.139
Gem.e000b000 Waiting for PHY auto negotiation to complete.... done
Gem.e000b000----100----4047----
Using Gem.e000b000 device
host 192.168.0.139 is alive
看到上面的信息说明网络连接没有问题。
5、备份分区
Ubuntu下安装搭建tftp服务器,网上有很多教程,但有的确实不好使,这里参考的http://blog.sina.com.cn/s/blog_7e8fb215010166di.html,搭建好服务器,就可以开始使用tftp备份了。
首先读取指定分区内容到内存,使用nand read命令,第一个参数是内存的地址,第二个是nand的偏移地址,第三个参数是大小,然后通过tftp将内存中的内容上传至服务器,具体操作如下:
ynq-uboot> nand read 0x100000 0x000000 0x300000NAND read: device 0 offset 0x0, size 0x3000003145728 bytes read: OK
zynq-uboot> md.b 100000 80
00100000: fe ff ff ea fe ff ff ea fe ff ff ea fe ff ff ea ................
00100010: fe ff ff ea fe ff ff ea fe ff ff ea fe ff ff ea ................
00100020: 66 55 99 aa 58 4e 4c 58 00 00 00 00 00 00 01 01 fU..XNLX........
00100030: 00 17 00 00 10 80 01 00 00 00 00 00 00 00 00 00 ................
00100040: 10 80 01 00 01 00 00 00 20 45 16 fc 00 00 00 00 ........ E......
00100050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00100060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00100070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
zynq-uboot> tftpput 0x100000 0x300000 fsbl-uboot
Gem.e000b000:0 is connected to Gem.e000b000. Reconnecting to Gem.e000b000
Gem.e000b000 Waiting for PHY auto negotiation to complete..... done
Gem.e000b000----100----4047----
Using Gem.e000b000 device
TFTP to server 192.168.0.139; our IP address is 192.168.0.99
Filename 'fsbl-uboot'.
Save address: 0x100000
Save size: 0x300000
Saving: ################################################################ ################################################################# ################################################################# #################### 1.2 MiB/s
done
Bytes transferred = 3145728 (300000 hex)
zynq-uboot>
其中使用了u-boot的md命令查看了以下内存的内容,只显示了部分(0x80即128字节),再查看以下上传到服务其上的文件内容:
zhy@ubuntu:/var/tftpboot$ xxd -l 0x80 fsbl-uboot
00000000: feff ffea feff ffea feff ffea feff ffea ................
00000010: feff ffea feff ffea feff ffea feff ffea ................
00000020: 6655 99aa 584e 4c58 0000 0000 0000 0101 fU..XNLX........
00000030: 0017 0000 1080 0100 0000 0000 0000 0000 ................
00000040: 1080 0100 0100 0000 2045 16fc 0000 0000 ........ E......
00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
zhy@ubuntu:/var/tftpboot$
可以看出,文件内容与开发板上我们拷贝到内存中的数据一致,说明上传的文件没有问题,接下来是linux分区
zynq-uboot> nand read 0x100000 0x300000 0x500000 NAND read: device 0 offset 0x300000, size 0x500000 5242880 bytes read: OK
zynq-uboot> md.b 100000 80
00100000: 27 05 19 56 15 a8 ff 9c 59 10 12 0c 00 3a 4c 90 '..V....Y....:L.
00100010: 00 00 80 00 00 00 80 00 05 59 97 a0 05 02 02 00 .........Y......
00100020: 4c 69 6e 75 78 2d 34 2e 36 2e 30 2d 78 69 6c 69 Linux-4.6.0-xili
00100030: 6e 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 nx..............
00100040: 00 00 a0 e1 00 00 a0 e1 00 00 a0 e1 00 00 a0 e1 ................
00100050: 00 00 a0 e1 00 00 a0 e1 00 00 a0 e1 00 00 a0 e1 ................
00100060: 03 00 00 ea 18 28 6f 01 00 00 00 00 90 4c 3a 00 .....(o......L:.
00100070: 01 02 03 04 00 90 0f e1 d8 0b 00 eb 01 70 a0 e1 .............p..
zynq-uboot> tftpput 0x100000 0x500000 linux
Gem.e000b000:0 is connected to Gem.e000b000. Reconnecting to Gem.e000b000
Gem.e000b000 Waiting for PHY auto negotiation to complete....... done
Gem.e000b000----100----4047----
Using Gem.e000b000 device
TFTP to server 192.168.0.139; our IP address is 192.168.0.99
Filename 'linux'.
Save address: 0x100000
Save size: 0x500000
Saving: ################################################################ ################################################################# ################################################################# ################################################################# ################################################################# ################################# 1.3 MiB/s
done
Bytes transferred = 5242880 (500000 hex)
zynq-uboot>
上传后文件的内容
hy@ubuntu:/var/tftpboot$ xxd -l 0x80 linux
00000000: 2705 1956 15a8 ff9c 5910 120c 003a 4c90 '..V....Y....:L.
00000010: 0000 8000 0000 8000 0559 97a0 0502 0200 .........Y......
00000020: 4c69 6e75 782d 342e 362e 302d 7869 6c69 Linux-4.6.0-xili
00000030: 6e78 0000 0000 0000 0000 0000 0000 0000 nx..............
00000040: 0000 a0e1 0000 a0e1 0000 a0e1 0000 a0e1 ................
00000050: 0000 a0e1 0000 a0e1 0000 a0e1 0000 a0e1 ................
00000060: 0300 00ea 1828 6f01 0000 0000 904c 3a00 .....(o......L:.
00000070: 0102 0304 0090 0fe1 d80b 00eb 0170 a0e1 .............p..
zhy@ubuntu:/var/tftpboot$
检查内容没有问题,其它分区采用同样的方法依次备份即可。 最后一个分区按照大小读取nand总是失败,也就不管了,查看备份后的文件:
zhy@ubuntu:/var/tftpboot$ ls -l
总用量 129024
-rw-rw-rw- 1 tftp tftp 67108864 5月 17 11:49 allrootfs
-rw-rw-rw- 1 tftp tftp 8388608 5月 17 11:46 bitstream
-rw-rw-rw- 1 tftp tftp 131072 5月 17 11:33 device-tree
-rw-rw-rw- 1 tftp tftp 3145728 5月 17 10:42 fsbl-uboot
-rw-rw-rw- 1 tftp tftp 16777216 5月 17 11:43 jffs2
-rw-rw-rw- 1 tftp tftp 5242880 5月 17 11:15 linux
-rw-rw-rw- 1 tftp tftp 20840448 5月 17 11:52 release
-rw-rw-rw- 1 tftp tftp 10485760 5月 17 11:39 rootfs
读取nand中分区到内存是需要注意起始地址和大小不要写错了,起始地址就是个分区的开始地址,大小直接用结束地址减去开始地址就行。
2、清除root用户密码
1、挂载文件系统,将备份好的文件系统allrootfs,网上论坛帖子说密码存放在该文件系统中。
参考《已有 JFFs2文件系统的修改》先安装mtd工具,然后进行如下操作即可
sudo modprobe -v mtd
sudo modprobe -v jffs2
sudo modprobe -v mtdram total_size=100000 erase_size=128 (单位:K)
sudo modprobe -v mtdblock
sudo flash_eraseall /dev/mtd0
用dd命令将allrootfs装入mtd0分区:
sudo dd if=allrootfs of=/dev/mtd0
注意total_size的大小,不能小于allrootfs的大小,这里我直接使用100000KB,足够用了,如果小了后面使用dd命令装载时会提示没有足够的空间。使用dd命令装载allrootfs时要注意文件的位置。装载成功后,就可以挂载设备了。
zhy@ubuntu:/var/tftpboot$ sudo mkdir fsmount
zhy@ubuntu:/var/tftpboot$ sudo mount -t jffs2 /dev/mtdblock0 fsmount
zhy@ubuntu:/var/tftpboot$ cd fsmount/
zhy@ubuntu:/var/tftpboot/fsmount$ ls
bin dev home lib mnt proc sbin tmp var
boot etc init media opt run sys usr
挂载成功后即可看到熟悉的linux目录结构了
2、清除root用户密码
将etc/passwd
root:$1$EDMrnDlh$7LkuvQcUboEGtCysGgqng/:0:0:root:/home/root:/bin/sh
daemon:*:1:1:daemon:/usr/sbin:/bin/sh
bin:*:2:2:bin:/bin:/bin/sh
sys:*:3:3:sys:/dev:/bin/sh
sync:*:4:65534:sync:/bin:/bin/sync
games:*:5:60:games:/usr/games:/bin/sh
man:*:6:12:man:/var/cache/man:/bin/sh
lp:*:7:7:lp:/var/spool/lpd:/bin/sh
mail:*:8:8:mail:/var/mail:/bin/sh
news:*:9:9:news:/var/spool/news:/bin/sh
uucp:*:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:*:13:13:proxy:/bin:/bin/sh
www-data:*:33:33:www-data:/var/www:/bin/sh
backup:*:34:34:backup:/var/backups:/bin/sh
list:*:38:38:Mailing List Manager:/var/list:/bin/sh
irc:*:39:39:ircd:/var/run/ircd:/bin/sh
gnats:*:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:*:65534:65534:nobody:/nonexistent:/bin/sh
第一行修改为
root::0:0:root:/home/root:/bin/sh
注意相应操作的目录都是在挂载的目录下,而不是主机的相应目录。修改后保存即可。
也可以将自动挖矿的程序停止。将etc/rcS.d/S95cgminer.sh下的shell脚本移动到其它目录或直接删除即可
zhy@ubuntu:/var/tftpboot/fsmount$ sudo mv etc/rcS.d/S95cgminer.sh home/root/
3、重新生成jffs2文件系统
zhy@ubuntu:/var/tftpboot/fsmount$ cd ..
zhy@ubuntu:/var/tftpboot$ mkfs.jffs2 -r fsmount -o allrootfs.new -e 0x20000 –pad=0x4000000 -n -l
4、把改好的文件系统烧回nand对应分区
zynq-uboot> tftpboot 0x100000 allrootfs.new
zynq-uboot> nand erase 0x2a20000 0x4000000 zynq-uboot> nand write 0x100000 0x2a20000 0x4000000
重起开发板,登录的时候直接输入root就进系统了。
3、启用网络
进入系统发现网络只有回环,没有有线网络链接。
root@zedboard-zynq7:~# ifconfig
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1%768144/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
既然uboot都能使用网络,linux下肯定也没有问题的。打开/etc/network/interface文件
root@zedboard-zynq7:~# vi /etc/network/interfaces
找到下面的内容
# Wired or wireless interfaces
# auto eth0
# iface eth0 inet dhcp
#iface eth1 inet dhcp
改为
# Wired or wireless interfaces
auto eth0
iface eth0 inet dhcp
#iface eth1 inet dhcp
重启后,就可以使用有线网络了
root@zedboard-zynq7:~# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0A:35:00:01:22 inet addr:192.168.0.122 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::20a:35ff:fe00:122%768144/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:143012 errors:0 dropped:10 overruns:0 frame:0 TX packets:142435 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:77596550 (74.0 MiB) TX bytes:6555498 (6.2 MiB) Interrupt:148 Base address:0xb000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1%768144/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) root@zedboard-zynq7:~#
而且tftp、ssh都可以使用
root@zedboard-zynq7:~# ssh
Dropbear SSH client v2016.72 https://matt.ucc.asn.au/dropbear/dropbear.html
Usage: ssh [options] [user@]host[/port][,[user@]host/port],...] [command]
-p <remoteport>
-l <username>
-t Allocate a pty
-T Don't allocate a pty
-N Don't run a remote command
-f Run in background after auth
-y Always accept remote host key if unknown
-y -y Don't perform any remote host key checking (caution)
-s Request a subsystem (use by external sftp)
-i <identityfile> (multiple allowed, default .ssh/id_dropbear)
-A Enable agent auth forwarding
-L <[listenaddress:]listenport:remotehost:remoteport> Local port forwarding
-g Allow remote hosts to connect to forwarded ports
-R <[listenaddress:]listenport:remotehost:remoteport> Remote port forwarding
-W <receive_window_buffer> (default 24576, larger may be faster, max 1MB)
-K <keepalive> (0 is never, default 0)
-I <idle_timeout> (0 is never, default 0)
-B <endhost:endport> Netcat-alike forwarding
-J <proxy_program> Use program pipe rather than TCP connection
-c <cipher list> Specify preferred ciphers ('-c help' to list options)
-m <MAC list> Specify preferred MACs for packet verification (or '-m help')
-V Version
root@zedboard-zynq7:~# tftp
BusyBox v1.24.1 (2016-12-12 22:50:17 MST) multi-call binary. Usage: tftp [OPTIONS] HOST [PORT] Transfer a file from/to tftp server -l FILE Local FILE -r FILE Remote FILE -g Get file -p Put file
root@zedboard-zynq7:~#
4、Linux下测试程序
编写hello程序测试
#include <stdio.h>
int main(void)
{printf("hello ebaz4205!\r\n");return 0;
}
交叉编译,并将可执行程序移到tftp服务器根目录
zhy@ubuntu:~/project/$ arm-linux-gcc -o test main.c -static
zhy@ubuntu:~/project$ sudo mv test /var/tftpboot/test
使用tftp下载执行
EBAZ4205 ZYNQ 7Z010原始LINUX系统的修改与使用相关推荐
- Xilinx Zynq 7000 安装Linux 系统
Xilinx Zynq 7000 安装Linux 系统 介绍 1 准备工作 2 工具的安装 2.1 支持库的安装 2.2 PetaLinux的安装 3 搭建硬件系统 3.1 建立工程 3.2 添加IP ...
- linux下防火墙脚本,Linux系统如何修改防火墙配置
这篇文章主要介绍了Linux系统如何修改防火墙配置,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 改Linux系统防火墙配置需要修改 /etc/sy ...
- linux通过文件修改密码,如何通过Linux系统来修改密码
现在使用Linux作为服务器的人越来越多,其实它非常适合中小企业,下面爱站技术频道小编一起教你如何通过Linux系统来修改密码,感兴趣的小伙伴们可以进入下文参考一下. 一. 下载软件 这个自由软件源于 ...
- C#net6实现Linux系统下修改IP地址、修改系统时间、获取内存信息、获取磁盘信息、重启系统
C#net6实现Linux系统下修改IP地址.修改系统时间.获取内存信息.获取磁盘信息.重启系统 背景 项目背景 实现思路 代码实现 背景 随着微软.net core的出现,C#程序实现跨平台不在困难 ...
- LINUX系统如何修改时间
我们一般使用"date -s"命令来修改Linux系统时间. 比如将系统时间设定成1996年6月10日的命令: #date -s 06/10/96 将系统时间设定成下午1点12分 ...
- Linux系统时间修改方法
Linux系统时间修改方法 1. 第一种方式 1.将系统时间设定成下午5点55分55秒的命令命令 : "date -s 17:55:55"#date -s "12:12: ...
- ZYNQ 7020 XME0724 linux 系统没有 hit any key to stop autoboot
ZYNQ 7020 XME0724 linux 系统没有 hit any key to stop autoboot,出现的现象如下: 设置命令为:setenv bootcmd run default_ ...
- linux文件编码无法修改,在Linux系统中修改文本的字符编码的方法
正如我们所知道的那样,电脑只能够处理低级的二进制值,并不能直接处理字符.当一个文本文件被存储时,文件中的每一个字符都被映射成二进制值,实际存储在硬盘中的正是这些"二进制值".之后当 ...
- putty远程linux系统时间修改,用putty怎么修改监控服务器时间?
怎么修改服务器时间?是一个很勇敢的客户,基本上不懂怎么操作linux系统,但是愿意买了,来享受我司的一些免费指导和来提高自学能力,用他自己的话说,这就跟花钱去健身房一样,其实运动在哪都可以做,但是花钱 ...
最新文章
- C语言的链表—完整代码
- angular环境搭建
- javaMail发邮件
- 【LeetCode】【HOT】240. 搜索二维矩阵 II(抽象二叉搜索树)
- python sql查询返回记录_干货!Python与MySQL数据库的交互实战
- golang 学习心得一(开发环境搭建过程中一些坑)
- 应用安全-软件安全-漏洞修复整理
- Android studio 报错 Unknown host 'jcenter.bintray.com'
- java俄罗斯方块算法_【俄罗斯方块java】分享一个Java写的俄罗斯方块源码 算法简单(300行) 注释详细!...
- chrome 下载东西 失败禁止_如何修复最常见的Google Chrome下载错误
- 音频处理——常用音频编码格式简介(PCM、G726、ADPCM、LPCM、G711、AAC)
- remote debugger java,VS2015 远程调试:Remote Debugger
- java导出pdf 含图片_【Java】itext根据模板生成pdf(包括图片和表格)
- 【xinput1_3.dll下载】xinput1_3.dll丢失怎么修复win10
- Win系统 - Windows10 系统恢复语言栏位置的方法(一)
- Matlab LZW编码
- 最简单ListView显示联系人姓名和电话号码
- 最全各种浏览器网页星号点号密码查看最简方法(技术小白也能看懂使用)
- MySQL数据库总结
- 云服务器的防火墙有什么作用?