1、uboot编译
匹配板子需要修改的设备树文件目录:/arch/arm/dts/zynq-zc702.dts
source /opt/Xilinx/SDK/2019.1/settings64.sh
export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
make zynq_zc702_defconfig
make -j16
在 zynq_zc702_defconfig 文件中会涉及到zynq-common.h 和 zynq-zc702.dts的引用。
zynq-common.h 路径:\include\configs\zynq-common.h
zynq-zc702.dts 路径:\arch\arm\dts
2、内核编译
内核编译,匹配板子时可能需要修改到的文件 /arch/arm/boot/dts
source /opt/Xilinx/SDK/2019.1/settings64.sh
export ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
make xilinx_zynq_defconfig
make uImage LOADADDR=0x8000 -j16
按照上述指令完成内核编译,生成的uImage所在文件夹:
/arch/arm/boot/
3、设备树文件编译
使用下述命令完成设备树文件编译,注意:1、设备树引用头需要修改为:/include/ 2、需要完成内核编译后才可以响应下述指令。
./scripts/dtc/dtc -I dts -O dtb -o ./arch/arm/boot/zynq-zc702.dtb ./arch/arm/boot/dts/system-top.dts
除了使用这个脚本文件编译设备树,也可以使用
make dtbs
用这个命令就不需要修改 /include/
设备树xx.dtb反编译为xx.dts
dtc -I dtb -O dts xx.dtb -o xx.dts
4、uboot启动
远程tftp服务器加载内核,注意顺序。
set serverip xxx.xxx.x.x
setenv bootcmd 'dhcp;tftpboot 0 zynq-zc702.dtb;tftpboot 8000 uImage;tftpboot 1000000 uramdisk.image.gz;bootm 8000 1000000 0;'
saveenv
加载本地ext4分区中的文件系统:
setenv bootargs 'console=ttyPS0,115200n8 root=/dev/mmcblk0p2 rw noinitrd rootfstype=ext4 rootwait'
远程加载文件系统:
setenv bootargs 'console=ttyPS0,115200 root=/dev/nfs rw nfsroot=190.0.5.158:/linux/nfs/robot2_0rf ip=190.0.5.251:190.0.5.158:190.0.5.1:255.255.255.0::eth0:off'
**工作分区,启动变量
setenv bootargs 'console=ttyPS0,115200n8 root=/dev/mmcblk1p2 rw noinitrd rootfstype=ext4 rootwait'
setenv emmcworkboot 'run mmc_loadbit_fat;run uenvboot; echo Copying Linux from emmc_work to RAM... && load mmc 1:1 ${kernel_load_address} ${kernel_image} && load mmc 1:1 ${devicetree_load_address} ${devicetree_image} && bootm ${kernel_load_address} - ${devicetree_load_address};'
**备份分区,启动变量
setenv bootargs 'console=ttyPS0,115200n8 root=/dev/mmcblk1p4 rw noinitrd rootfstype=ext4 rootwait'
setenv emmcbackboot 'run mmc_loadbit_fat;run uenvboot; echo Copying Linux from emmc_back to RAM... && load mmc 1:3 ${kernel_load_address} ${kernel_image} && load mmc 1:3 ${devicetree_load_address} ${devicetree_image} && bootm ${kernel_load_address} - ${devicetree_load_address};'
备用分区操作脚本
#!/bin/sh
SD_P1_PATH=/media/sd_fat
SD_P2_PATH=/media/sd_ext
EMMC_P1_PATH=/media/emmc_p1
EMMC_P2_PATH=/media/emmc_p2
EMMC_P3_PATH=/media/emmc_p3
EMMC_P4_PATH=/media/emmc_p4
if [ ! -d $EMMC_P1_PATH ]
then
mkdir -p $EMMC_P1_PATH
fi
if [ ! -d $EMMC_P2_PATH ]
then
mkdir -p $EMMC_P2_PATH
fi
if [ ! -d $EMMC_P3_PATH ]
then
mkdir -p $EMMC_P3_PATH
fi
if [ ! -d $EMMC_P4_PATH ]
then
mkdir -p $EMMC_P4_PATH
fi
if [ ! -d $SD_P1_PATH ]
then
mkdir -p $SD_P1_PATH
fi
if [ ! -d $SD_P2_PATH ]
then
mkdir -p $SD_P2_PATH
fi
mount /dev/mmcblk1p1 $EMMC_P1_PATH
ret=$?
if [ $ret -ne 0 ]; then
echo "Start format /dev/mmcblk1"
dd if=/dev/zero of=/dev/mmcblk1 bs=512 count=1
sync
echo "format finished!"
echo "Step1:Parting the disks..."
fdisk /dev/mmcblk1 <<EOF
n
p
1
+512M
t
c
n
p
2
+1024M
n
p
3
+1536M
t
3
c
n
p
wq
EOF
partprobe &> /dev/null
echo "Part finished!"
echo "Step2:Formating disks..."
mkdosfs /dev/mmcblk1p1
mke2fs /dev/mmcblk1p2
mkdosfs /dev/mmcblk1p3
mke2fs /dev/mmcblk1p4
echo "Format finished!"
mount /dev/mmcblk1p1 $EMMC_P1_PATH
mount /dev/mmcblk1p2 $EMMC_P2_PATH
mount /dev/mmcblk1p3 $EMMC_P3_PATH
mount /dev/mmcblk1p4 $EMMC_P4_PATH
mount /dev/mmcblk0p1 $SD_P1_PATH
mount /dev/mmcblk0p2 $SD_P2_PATH
cp -r $SD_P1_PATH/system_wrapper.bit $EMMC_P1_PATH
cp -r $SD_P1_PATH/system.dtb $EMMC_P1_PATH
cp -r $SD_P1_PATH/uImage $EMMC_P1_PATH
echo "Copy uImage bit dtb to workspace finished!"
cp -r $SD_P2_PATH/* $EMMC_P2_PATH
echo "Copy rootfs to workspace finished!"
cp -r $SD_P1_PATH/system_wrapper.bit $EMMC_P3_PATH
cp -r $SD_P1_PATH/system.dtb $EMMC_P3_PATH
cp -r $SD_P1_PATH/uImage $EMMC_P3_PATH
echo "Copy uImage bit dtb to backspace finished!"
cp -r $SD_P2_PATH/* $EMMC_P4_PATH
echo "Copy rootfs to backspace finished!"
else
echo "Emmc has been disk!"
mount /dev/mmcblk1p2 $EMMC_P2_PATH
fi
本地SD卡内核启动,应确保SD卡中具备devicetree.dtb fuImage uramdisk.image.gz 三个文件
setenv bootcmd 'mmcinfo && fatload mmc 0 0 devicetree.dtb; fatload mmc 0 8000 uImage;fatload mmc 0 1000000 uramdisk.image.gz;bootm 8000 1000000 0;'
如果是不需要uramdisk.image.gz 则使用:bootm 8000 - 0
5、SPI FLASH擦除
sf probe 0
sf erase 0 0x1000000
6、u-boot加载bit教程
uboot利用uEnv.txt文件实现灵活功能(加载PL侧bit,修改uenvcmd,配置bootargs,配置bootm,配置bootz)_Huskar_Liu的博客-CSDN博客_uenv.ini
7、解压缩
Linux下的tar压缩解压缩命令详解 - 码农一只 - 博客园
8、TCF-agent搭建
git clone http://git.eclipse.org/gitroot/tcf/org.eclipse.tcf.agent.git
cd org.eclipse.tcf.agent/agent
make CC=arm-linux-gnueabihf-gcc LD=arm-linux-gnueabi-ld MACHINE=arm NO_SSL=1 NO_UUID=1
编译后会在:/org.eclipse.tcf.agent/agent/obj/GNU/Linux/arm/Debug目录下,生成agent,将该文件拷贝到文件系统
./agent & 即可使用xilinx SDK完成在线调试。
9、ubuntu无网络连接符号
service network-manager restart
【解决】Failed to restart network.service: Unit network.service not found. - LeoZhanggg - 博客园
10、vi操作
在命令模式下,输入:.,$d 然后回车
表示从当前行到末行全部删除
用gg表示移动到首行
11、MMC操作
fatls mmc 0:1