From faae3829556e7d801b73d890738cfa37960489d9 Mon Sep 17 00:00:00 2001
From: Miaow <3703781@qq.com>
Date: Sat, 29 Apr 2023 02:07:53 +0800
Subject: [PATCH] =?UTF-8?q?refactor(pl,drv,doc,scr):=20=E8=A1=A5=E5=85=85p?=
=?UTF-8?q?l=E7=AB=AF=E6=BA=90=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1. 添加pl端vivado工程生成脚本和源码
2. pl端设计删除本项目无关的fifo和valve interfaces模块
3. 系统部署脚本中删除fifo相关内容
4. 删除linux下的fifo驱动
5. 修改与上述内容有关的文档
BREAKING CHANGE: fifo有关功能和寄存器不再有效
Co-authored-by: lyz <1942503466@qq.com>
---
README.md | 4 +-
doc/develop_and_deploy.md | 100 +-
.../system_arch.jpg | Bin 264014 -> 0 bytes
.../system_arch.svg | 1 +
doc/hardware_description.md | 39 +-
doc/pl_reference_mannual.assets/blocks.pptx | Bin 47310 -> 43480 bytes
.../encoder_regs.svg | 2 +-
doc/pl_reference_mannual.assets/fifo_cr.png | Bin 5379 -> 0 bytes
doc/pl_reference_mannual.assets/fifo_datx.png | Bin 6836 -> 0 bytes
doc/pl_reference_mannual.assets/fifo_ecr.png | Bin 12254 -> 0 bytes
doc/pl_reference_mannual.assets/fifo_regs.png | Bin 106008 -> 0 bytes
doc/pl_reference_mannual.assets/fifo_sr.png | Bin 6696 -> 0 bytes
doc/pl_reference_mannual.assets/regs.xlsx | Bin 29949 -> 20822 bytes
.../system_arch.jpg | Bin 264014 -> 0 bytes
.../system_arch.svg | 1 +
doc/pl_reference_mannual.md | 95 +-
doc/version | 2 +-
hardware/pl_platform/README.md | 1 -
hardware/pl_platform/bd/system.tcl | 648 ++++++++++
hardware/pl_platform/cstr/lower_machine.xdc | 30 +
.../.Xil/.ip_encoder_0.xcix.lock | 0
.../ip_repo/ip_encoder_1.0/bd/bd.tcl | 86 ++
.../ip_repo/ip_encoder_1.0/component.xml | 1105 +++++++++++++++++
.../ip_encoder_v1_0/data/ip_encoder.mdd | 10 +
.../ip_encoder_v1_0/data/ip_encoder.tcl | 5 +
.../drivers/ip_encoder_v1_0/src/Makefile | 26 +
.../drivers/ip_encoder_v1_0/src/ip_encoder.c | 6 +
.../drivers/ip_encoder_v1_0/src/ip_encoder.h | 79 ++
.../ip_encoder_v1_0/src/ip_encoder_selftest.c | 60 +
.../example_designs/bfm_design/design.tcl | 88 ++
.../bfm_design/ip_encoder_v1_0_tb.sv | 197 +++
.../debug_hw_design/design.tcl | 118 ++
.../ip_encoder_v1_0_hw_test.tcl | 45 +
.../ip_encoder_1.0/hdl/ip_encoder_v1_0.v | 102 ++
.../hdl/ip_encoder_v1_0_S00_AXI.v | 482 +++++++
.../ip_repo/ip_encoder_1.0/ip_encoder_0.xcix | Bin 0 -> 241 bytes
.../ip_repo/ip_encoder_1.0/src/encoder.v | 226 ++++
.../ip_encoder_1.0/xgui/ip_encoder_v1_0.tcl | 56 +
.../ip_encoder_1.0/xgui/ip_encoder_v1_1.tcl | 53 +
.../pl_platform/ip_repo/ip_fan_1.0/bd/bd.tcl | 86 ++
.../ip_repo/ip_fan_1.0/component.xml | 993 +++++++++++++++
.../drivers/ip_fan_v1_0/data/ip_fan.mdd | 10 +
.../drivers/ip_fan_v1_0/data/ip_fan.tcl | 5 +
.../drivers/ip_fan_v1_0/src/Makefile | 26 +
.../drivers/ip_fan_v1_0/src/ip_fan.c | 6 +
.../drivers/ip_fan_v1_0/src/ip_fan.h | 79 ++
.../drivers/ip_fan_v1_0/src/ip_fan_selftest.c | 60 +
.../example_designs/bfm_design/design.tcl | 88 ++
.../bfm_design/ip_fan_v1_0_tb.sv | 197 +++
.../debug_hw_design/design.tcl | 118 ++
.../debug_hw_design/ip_fan_v1_0_hw_test.tcl | 45 +
.../ip_repo/ip_fan_1.0/hdl/ip_fan_v1_0.v | 82 ++
.../ip_fan_1.0/hdl/ip_fan_v1_0_S00_AXI.v | 457 +++++++
.../ip_repo/ip_fan_1.0/ip_fan_0.xcix | Bin 0 -> 239 bytes
.../ip_repo/ip_fan_1.0/xgui/ip_fan_v1_0.tcl | 81 ++
hardware/pl_platform/lower_machine.tcl | 568 +++++++++
hardware/pl_platform/version | 2 +-
script/loadfifo.sh | 3 -
script/version | 2 +-
source/linux_driver/fifo.c | 354 ------
source/linux_driver/version | 2 +-
61 files changed, 6395 insertions(+), 536 deletions(-)
delete mode 100644 doc/hardware_description.assets/system_arch.jpg
create mode 100644 doc/hardware_description.assets/system_arch.svg
delete mode 100644 doc/pl_reference_mannual.assets/fifo_cr.png
delete mode 100644 doc/pl_reference_mannual.assets/fifo_datx.png
delete mode 100644 doc/pl_reference_mannual.assets/fifo_ecr.png
delete mode 100644 doc/pl_reference_mannual.assets/fifo_regs.png
delete mode 100644 doc/pl_reference_mannual.assets/fifo_sr.png
delete mode 100644 doc/pl_reference_mannual.assets/system_arch.jpg
create mode 100644 doc/pl_reference_mannual.assets/system_arch.svg
delete mode 100644 hardware/pl_platform/README.md
create mode 100644 hardware/pl_platform/bd/system.tcl
create mode 100644 hardware/pl_platform/cstr/lower_machine.xdc
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/.Xil/.ip_encoder_0.xcix.lock
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/bd/bd.tcl
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/component.xml
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/drivers/ip_encoder_v1_0/data/ip_encoder.mdd
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/drivers/ip_encoder_v1_0/data/ip_encoder.tcl
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/drivers/ip_encoder_v1_0/src/Makefile
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/drivers/ip_encoder_v1_0/src/ip_encoder.c
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/drivers/ip_encoder_v1_0/src/ip_encoder.h
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/drivers/ip_encoder_v1_0/src/ip_encoder_selftest.c
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/example_designs/bfm_design/design.tcl
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/example_designs/bfm_design/ip_encoder_v1_0_tb.sv
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/example_designs/debug_hw_design/design.tcl
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/example_designs/debug_hw_design/ip_encoder_v1_0_hw_test.tcl
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/hdl/ip_encoder_v1_0.v
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/hdl/ip_encoder_v1_0_S00_AXI.v
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/ip_encoder_0.xcix
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/src/encoder.v
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/xgui/ip_encoder_v1_0.tcl
create mode 100644 hardware/pl_platform/ip_repo/ip_encoder_1.0/xgui/ip_encoder_v1_1.tcl
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/bd/bd.tcl
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/component.xml
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/drivers/ip_fan_v1_0/data/ip_fan.mdd
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/drivers/ip_fan_v1_0/data/ip_fan.tcl
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/drivers/ip_fan_v1_0/src/Makefile
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/drivers/ip_fan_v1_0/src/ip_fan.c
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/drivers/ip_fan_v1_0/src/ip_fan.h
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/drivers/ip_fan_v1_0/src/ip_fan_selftest.c
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/example_designs/bfm_design/design.tcl
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/example_designs/bfm_design/ip_fan_v1_0_tb.sv
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/example_designs/debug_hw_design/design.tcl
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/example_designs/debug_hw_design/ip_fan_v1_0_hw_test.tcl
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/hdl/ip_fan_v1_0.v
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/hdl/ip_fan_v1_0_S00_AXI.v
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/ip_fan_0.xcix
create mode 100644 hardware/pl_platform/ip_repo/ip_fan_1.0/xgui/ip_fan_v1_0.tcl
create mode 100644 hardware/pl_platform/lower_machine.tcl
delete mode 100644 script/loadfifo.sh
delete mode 100644 source/linux_driver/fifo.c
diff --git a/README.md b/README.md
index 64e3f9a..24f363a 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,7 @@ IO扩展版提供了
- 6个编码器或IO输入,本次项目为1个编码器输入、1个物体传感器输入,其余冗余
- 8个阀板接口,本次项目没有用到
-接线时,12V电源连接到IO扩展板的电源接口,阀板从左到右应连接在阀板接口1~6上,相机线应连接相机触发接口`TRIG1`和对应的`GND`接口,编码器线应连接在编码器输入接口`E1`和对应的`GND`接口。注意底板不连接任何外部电源。
+接线时,12V电源连接到IO扩展板的电源接口,相机线应连接相机触发接口`TRIG1`、`TRIG2`和对应的`GND`接口,编码器线应连接在编码器输入接口`E1`和对应的`GND`接口,物体传感器应连接输入接口`E3`和对应的`GND`接口。注意底板不连接任何外部电源。
开发和部署说明见[doc/develop_and_deploy.md](doc/develop_and_deploy.md)
@@ -70,7 +70,7 @@ b分支编号-p生产环境项目名-t分选对象[-其他特点1[-其他特点2
b分支编号-d文档版本-hPCB设计版本-lFPGA设计版本-p协议版本-s脚本版本-aAPP代码版本-i驱动版本-c系统编译配置版本-e设备树版本
```
-分支编号和分支命名中编号一致。各部分版本应在相应目录下创建文件注明,比如`2.1`版本的PCB设计:PCB工程目录中建立`version`文本文件,内容为文本`2.1`。对于涉及整体设计的大改动版本号加`1`,其余改动版本号加`0.1`。每个分支的版本各自独立,新分支的版本从`1.0`起计算
+分支编号和分支命名中编号一致。各部分版本应在相应目录下创建文件注明,比如`2.1`版本的PCB设计:PCB工程目录中建立`version`文本文件,内容为文本`2.1`。对于涉及整体设计的大改动版本号加`1`,其余改动版本号加`0.1`。每个分支的版本各自独立,新分支的版本从`1.0`起计算,也可从建立分支处原有版本起计算
## 作者
diff --git a/doc/develop_and_deploy.md b/doc/develop_and_deploy.md
index 9afde2c..afdcf4d 100644
--- a/doc/develop_and_deploy.md
+++ b/doc/develop_and_deploy.md
@@ -2,11 +2,26 @@
## 开发
-本次开发基于zynq xc7z010-1clg400芯片,因此FPGA设计软件为Vitis中包含的[Vivado 2022.1](https://china.xilinx.com/support/download/index.html/content/xilinx/zh/downloadNav/vitis.html),Linux编译工具为[petalinux 2022.2](https://china.xilinx.com/support/download/index.html/content/xilinx/zh/downloadNav/embedded-design-tools.html),Linux应用程序编译工具为linaro的[arm-linux-gnueabihf-gcc 12.2.1](https://snapshots.linaro.org/gnu-toolchain/12.2-2023.04-1/)。
+本次开发基于zynq `xc7z010-1clg400`芯片,因此FPGA设计软件为Vitis中包含的[Vivado 2022.1](https://china.xilinx.com/support/download/index.html/content/xilinx/zh/downloadNav/vitis.html),Linux编译工具为[petalinux 2022.2](https://china.xilinx.com/support/download/index.html/content/xilinx/zh/downloadNav/embedded-design-tools.html),Linux应用程序编译工具为linaro的[arm-linux-gnueabihf-gcc 12.2.1](https://snapshots.linaro.org/gnu-toolchain/12.2-2023.04-1/)。
### 生成硬件描述文件
-见[doc/hardware_description.md](hardware_description.md)
+1. 下载[hardware/pl_platform](../hardware/pl_platform)文件夹到家目录,这里假设用户为miaow
在vivado 2022.1中执行tcl脚本,复原工程
+ ```tcl
+ source /home/miaow/pl_platform/lower_machine.tcl
+ ```
+
+2. 重新生成`block design`的`output products`
+
+3. 生成`bitstream`后创建硬件描述文件,命令为
+ ```tcl
+ # 下面命令中32为计算机逻辑内核数,按实际设定
+ launch_runs impl_1 -to_step write_bitstream -jobs 32
+
+ # 生成硬件描述文件
+ write_hw_platform -fixed -include_bit -force -file /home/miaow/zynq/vivado_git/lower_machine/system_wrapper.xsa
+ ```
+ 硬件描述文件为`system_wrapper.xsa`
### 创建PETALINUX工程
@@ -17,7 +32,7 @@
$ petalinux-create -t project --template zynq -n ps-linux
```
-2. 上传硬件描述文件[source/petalinux_hwdescription/system_wrapper.xsa](source/petalinux_hwdescription/system_wrapper.xsa)到`ps-linux`目录中并config
+2. 上传release中的硬件描述文件`system_wrapper.xsa`到`ps-linux`目录中并config
```shell
system_wrapper.xsa上传到~/ps-linux
@@ -53,17 +68,15 @@
# └─Copy final images to tftpboot (不选)
```
-4. 创建两个模块
+4. 创建一个模块
```shell
- $ petalinux-create -t modules --name fifo --enable
$ petalinux-create -t modules --name encoder --enable
```
-1. 分别上传驱动代码[source/linux_driver/fifo.c](../source/linux_driver/fifo.c)和[source/linux_driver/encoder.c](../source/linux_driver/encoder.c)到下面的目录中
+1. 上传驱动代码[source/linux_driver/encoder.c](../source/linux_driver/encoder.c)到下面的目录中
```shell
- ~/ps-linux/project-spec/meta-user/recipes-modules/fifo/files
~/ps-linux/project-spec/meta-user/recipes-modules/encoder/files
```
@@ -75,7 +88,7 @@
上传source/petalinux_devicetree/system-user.dtsi
```
-2. 配置kernel,使用命令`petalinux-config -c kernel`,按下面提示或[source/petalinux_config/kernel.cfg](../source/petalinux_config/kernel.cfg)配置
+2. 配置`kernel`,使用命令`petalinux-config -c kernel`,按下面提示或[source/petalinux_config/kernel.cfg](../source/petalinux_config/kernel.cfg)配置
```shell
# File systems
@@ -90,7 +103,7 @@
# └─OTG support (勾选为星号)
```
-3. 配置rootfs,使用命令`petalinux-config -c rootfs`,按下面提示或[source/petalinux_config/rootfs_config](../source/petalinux_config/rootfs_config)配置
+3. 配置`rootfs`,使用命令`petalinux-config -c rootfs`,按下面提示或[source/petalinux_config/rootfs_config](../source/petalinux_config/rootfs_config)配置
```shell
# Filesystem Packages
@@ -190,18 +203,17 @@
# ├─imagefeature-package-management (勾选为星号)
# modules
# ├─encoder (不选)
- # ├─fifo (不选)
# PetaLinux RootFS Settings
# ├─ADD_EXTRA_USERS (root:3703;petalinux:3703;)
# ├─ADD_USERS_TO_GROUPS (petalinux:audio,video;)
# └─ADD_USERS_TO_SUDOERS (petalinux)
```
-8. 替换`~/ps-linux/project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h`为[platform-top.h](./petalinux_config/platform-top.h),用于添加u-boot所需的环境变量,实现动态加载比特流文件
+8. 替换`~/ps-linux/project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h`为[platform-top.h](../source/petalinux_config/platform-top.h),用于添加u-boot所需的环境变量,实现动态加载比特流文件
### 编译系统
-1. 编译工程,使用命令`petalinux-build`。编译完成,在当前工程目录下生成images文件夹,该命令将生成设备树文件、FSBL文件、U-Boot文件,Linux Kernel文件和rootfs文件镜像
+1. 编译工程,使用命令`petalinux-build`。编译完成,在当前工程目录下生成`images`文件夹,该命令将生成设备树文件、`FSBL`文件、`U-Boot`文件,`Linux Kernel`文件和`rootfs`文件镜像
2. 制作BOOT.BIN启动文件,具体命令如下:
@@ -213,14 +225,13 @@
### 编译驱动
-依次运行如下命令,单独编译3个驱动程序
+依次运行如下命令,编译驱动程序
```shell
-$ petalinux-build -c fifo
$ petalinux-build -c encoder
```
-编译后的模块文件为` ps-linux/build/tmp/sysroots-components/zynq_generic/fifo/lib/modules/5.15.36-xilinx-v2022.2/extra/fifo.ko`和`ps-linux/build/tmp/sysroots-components/zynq_generic/encoder/lib/modules/5.15.36-xilinx-v2022.2/extra/encoder.ko`
+编译后的模块文件为`ps-linux/build/tmp/sysroots-components/zynq_generic/encoder/lib/modules/5.15.36-xilinx-v2022.2/extra/encoder.ko`
### 编译应用程序
@@ -241,8 +252,6 @@ $ make CROSS_COMPILE=交叉编译工具链前缀
### 修改文件系统
-> 注意:github的release中包含了修改完成的rootfs.tar.gz,因此无需重复本节的步骤,本节仅用作记录修改步骤
-
1. 给SD卡创建DOS分区表,然后分2个区并创建文件系统,细节如下表:
| 扇区 | 大小 | 分区类型 | 文件系统 | 卷标 |
@@ -250,15 +259,17 @@ $ make CROSS_COMPILE=交叉编译工具链前缀
| 2048~x扇区 | 100M | C W95 FAT32 (LBA) | FAT32 | boot |
| x扇区~最后扇区 | ≈SD卡大小-100M | 83 Linux | ext4 | rootfs |
-2. 将打包和编译得到的BOOT.BIN、boot.scr、system.bit和image.ub复制到boot分区;将rootfs.tar.gz解压到rootfs分区
+2. 将打包和编译得到的`BOOT.BIN`、`boot.scr`、`system.bit`和`image.ub`复制到`boot`分区;将`rootfs.tar.gz`解压到`rootfs`分区
- > 注意: 这里的system.bit为比特流文件,可以由petalinux从XSA文件中提取,也可以是vivado生成的,注意命名为system.bit。
+ 这里的`system.bit`为比特流文件,可以由`petalinux`从`XSA`文件中提取,也可以是`vivado`生成的,注意重命名为`system.bit`。
3. 拨码开关拨到SD卡启动,插入SD卡到XME0724底板上,上电启动。
4. 终端软件连接底板上的串口,波特率115200,8位,1停止位,无校验
-5. 修改/etc/shadow文件,将root用户的密码删除,切换到root用户并设定密码为3703,具体命令如下:
+> 注意:github的release中包含了修改完成的`rootfs.tar.gz`,因此无需重复下面的步骤,这里仅用作记录修改步骤
+
+5. 修改`/etc/shadow`文件,将`root`用户的密码删除,切换到`root`用户并设定密码为`3703`,具体命令如下:
```shell
$ sudo sed "1c root::15069:0:99999:7:::" /etc/shadow
@@ -268,7 +279,7 @@ $ make CROSS_COMPILE=交叉编译工具链前缀
```
-6. 配置网络和ssh服务,用root登录:
+6. 配置网络和`ssh`服务,用`root`登录:
```shell
$ vi /etc/network/interfaces
@@ -293,17 +304,14 @@ $ make CROSS_COMPILE=交叉编译工具链前缀
$ sshpass -p "3703" ssh root@192.168.10.10 -p 22
```
-8. 安装编译得到的驱动文件fifo.ko和encode.ko,并设置自动加载,对应自启脚本可以如下方式写入,也可以直接上传[script/loadfifo.sh](../script/loadfifo.sh)和[script/loadencoder.sh](../script/loadencoder.sh),ssh方式,root登录:
+8. 安装编译得到的驱动文件`encode.ko`,并设置自动加载,对应自启脚本可以如下方式写入,也可以直接上传[script/loadencoder.sh](../script/loadencoder.sh),ssh方式,`root`登录:
```shell
- 上传fifo.ko、encoder.ko到/lib/modules/[内核版本]/kernel/drivers/
+ 上传encoder.ko到/lib/modules/[内核版本]/kernel/drivers/
$ cd /lib/modules/[内核版本]; depmod
$ set +H
- $ echo -e "#!/bin/sh\nmodprobe fifo" > /etc/init.d/loadfifo.sh
$ echo -e "#!/bin/sh\nmodprobe encoder" > /etc/init.d/loadencoder.sh
- $ chmod 755 /etc/init.d/loadfifo.sh /etc/init.d/loadencoder.sh
$ cd /etc/rc5.d
- $ ln -s ../init.d/loadfifo.sh S20loadfifo.sh
$ ln -s ../init.d/loadencoder.sh S20loadencoder.sh
```
@@ -322,35 +330,35 @@ $ make CROSS_COMPILE=交叉编译工具链前缀
$ ln -s ../init.d/target.sh S99target.sh
```
-10. \[可选\] 设置.bashrc,修改PS1,对应脚本见[script/.profile](../script/.profile)和[script/.bashrc](../script/.bashrc)
+10. \[可选\] 设置`.bashrc`,修改`PS1`,对应脚本见[script/.profile](../script/.profile)和[script/.bashrc](../script/.bashrc)
- ```shell
- $ cd ~; rm .bashrc .profile
- 上传.bashrc和.profile到/home/root
- $ if [ ! -a /home/petalinux/.profile ]; then cp /home/root/.profile /home/petalinux/ fi
- $ if [ ! -a /home/petalinux/.bashrc ]; then cp /home/root/.bashrc /home/petalinux/ & chown petalinux:petalinux -R /home/petalinux fi
- $ source ~/.profile
- ```
+ ```shell
+ $ cd ~; rm .bashrc .profile
+ 上传.bashrc和.profile到/home/root
+ $ if [ ! -a /home/petalinux/.profile ]; then cp /home/ root/.profile /home/petalinux/ fi
+ $ if [ ! -a /home/petalinux/.bashrc ]; then cp /home/root/. bashrc /home/petalinux/ & chown petalinux:petalinux -R / home/petalinux fi
+ $ source ~/.profile
+ ```
-11. \[可选\] 安装ncurses-6.3和htop
+11. \[可选\] 安装`ncurses-6.3`和`htop`
- ```shell
- $ cd ~; rz # 上传ncurses-6.3.tar.gz
- $ tar xmzf /home/root/ncurses-6.3.tar.gz -C /usr/
- $ rz # 上传htop.tar.gz
- $ tar xmzf /home/root/htop.tar.gz -C /usr/
- $ echo "export TERMINFO=/usr/share/terminfo" >> /etc/profile
- $ reboot
- ```
+ ```shell
+ $ cd ~; rz # 上传ncurses-6.3.tar.gz
+ $ tar xmzf /home/root/ncurses-6.3.tar.gz -C /usr/
+ $ rz # 上传htop.tar.gz
+ $ tar xmzf /home/root/htop.tar.gz -C /usr/
+ $ echo "export TERMINFO=/usr/share/terminfo" >> /etc/profile
+ $ reboot
+ ```
### 直接写入镜像
-强烈推荐的傻瓜式的方法,在windows上准备好正版[DiskGenius标准版或专业版](https://www.diskgenius.cn/),盗版有BUG,从release中下载sdimage.pmfx文件
+强烈推荐的傻瓜式的方法,在windows上准备好正版[DiskGenius标准版或专业版](https://www.diskgenius.cn/),盗版有概率写入错误数据,从release中下载`sdimage.pmfx`文件
1. 在windows上插入16G的TF卡
-2. 打开DiskGenius
+2. 打开`DiskGenius`
3. 左侧栏选中TF卡,右键,从镜像文件还原磁盘
-4. 选sdimage.pmfx文件
+4. 选`sdimage.pmfx`文件
5. 点击开始
把TF卡插回板子,启动方式拨到SD卡启动,上电。要进入系统,参考修改文件系统章节的第7步。
diff --git a/doc/hardware_description.assets/system_arch.jpg b/doc/hardware_description.assets/system_arch.jpg
deleted file mode 100644
index ca76e22ab77d3ee17d95ba8ed29473c41a36b65e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 264014
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