问题:
1.ZYNQ Linux启动流程:
BOOTROM→FSBL→Uboot→Kernel→RootFS
环境:
虚拟机ubuntu16.04
petalinux2018.3
vivado2018.3
开发板:小熊猫z7020
前言
使用ZYNQ大概率会用到Linux。这里就对linux移植的整个流程做一个记录。
移植有两种方式:
(1)使用petalinux工具链进行移植。虚拟机需要装petalinux,自动化程度相对高。
(2)手动移植,需安装SDK移植环境或者petalinux的环境,两者貌似是一样的。
实际上,rootfs是可以随便用哪个的。比如,可以混搭手动移植的uboot\kernel,而使用petalinux的rootfs。或者使用petalinux的image.ub,而使用debian等三方rootfs。看需要使用。
手动移植可以更熟悉定制方面的内容,当然更为繁琐。
  • 建立BSP:
首先我们从建立底层硬件平台开始,其定义了底层的设备树相关内容、PL端功能等。
这里使用了网口0、SD卡、UART1,根据原理图分配管脚即可,网口和SD卡的管脚使用fast,设置好DDR信息。
(1)配置ZYNQ:
(2)正常综合编译生成bit导出BSP到文件夹。
(3)打开SDK查看一下是否导入成功。
  • SD卡分区:本次移植u-boot、kernel、rootfs都在SD上。
SD卡分区:https://blog.csdn.net/lulugay/article/details/83240981
分两个区即可,BOOT分区和RootFS分区,前面的分区用于存储u-boot和内核和PL端的bit,后一个分区用于存储根文件系统。
(1)在ubuntu中安装gparted。使用图形化界面简化操作,可直接在命令行中打开。
(2)切换到sd卡,可根据容量确认。
右键删除分区。
新建BOOT分区:最起始保留4MB空间,这里分512M,文件格式fat32,标签设置为BOOT。
剩下的全部分为RootFS分区。
至此,分区完成。
下述会讲述petalinux的移植方式和手动移植的方式。
一、petalinux移植
对于初学者,自然,petalinux是一种更为简便的方式,敲几个命令即可得到控制台的欢喜,而手动移植的坑还蛮多的。
(1)导出前述bsp到虚拟机:
(2)随便哪个位置新建个目录,并把sdk文件夹放入。这里新建个demo_linux文件夹。
(3)source下petalinux的环境(可放在bashrc中自动source,避免手动敲)。路径根据petalinux的安装路径进行选择。
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">source</span> /home/kingstacker/petalinux2018.3/settings.sh</code></span></span></span>
(4)新建一个petalinux项目:这里新建了个demo1_linux工程,路径下会自动新建demo1_linux文件夹,模板使用zynq,zynq7系列应该都是这个。
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>petalinux-<span style="color:#0000ff">create</span> -t <span style="color:#0000ff">project</span> -n demo1_linux <span style="color:#008000">--template zynq</span></code></span></span></span>
(5)cd到这个工程下面:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">cd</span> demo1_linux/</code></span></span></span>
(6)导入上层的SDK文件夹内容:会自动弹出配置窗口。
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>petalinux-config --get-hw-description=/home/kingstacker/demo_linux/project_1.sdk</code></span></span></span>
(7)配置使用哪个串口进行打印。这里我使用的是PS端的串口1,波特率115200,跟ZYNQ配置时保持一致即可。
在Subsystem AUTO Hardware Settings选项下的Serial Settings设置。
(8)设置bootargs,用于打印信息的串口指定,指定内核启动位置。注意:我这里使用了自动生成头,不使用自动的没得实验成功。
在DTG Setting选项卡下第三行修改如下:
键入bootargs:我这里使用了PS端的uart1(在设备树中被alias到了serial0),内核要从SD卡的第二个分区启动,分区格式为ext4。
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">console</span>=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait</code></span></span></span>
在Image Packaging Configuration中设置根文件系统类型,这里为SD卡。
切换到save保存主项配置,然后按两次ESC退出。
根据需要配置u-boot\kernel\rootfs内容,这里不配置使用默认,直接运行build即可。
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>petalinux-<span style="color:#0000ff">config</span> -c u-boot</code></span></span></span>
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>petalinux-<span style="color:#0000ff">config</span> -c kernel</code></span></span></span>
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>petalinux-<span style="color:#0000ff">config</span> -c rootfs</code></span></span></span>
(9)编译工程,打把游戏回来再看:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>petalinux-build</code></span></span></span>
(10)切换到image目录下的linux目录,执行语句生成BOOT.BIN文件。
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>petalinux-package --<span style="color:#0000ff">boot </span>--format <span style="color:#0000ff">BIN </span>--fsbl zynq_fsbl.elf --fpga system.<span style="color:#0000ff">bit </span>--u-<span style="color:#0000ff">boot</span></code></span></span></span>
(11)复制BOOT.BIN和image.ub文件到SD卡的BOOT分区。
我这里BOOT路径如下:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">cp</span> BOOT.BIN /media/kingstacker/BOOT/</code></span></span></span>
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">cp</span> image.ub /media/kingstacker/BOOT/</code></span></span></span>
(12)解压文件系统到SD卡的RootFS分区。
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">sudo</span> tar xvf rootfs.tar.gz -C /media/kingstacker/RootFS/</code></span></span></span>
至此,完成了所有内容,把SD卡放到板子上,切换板子启动模式为SD卡启动,连接CRT显示串口打印信息。
其他:
QEMU仿真:对于petalinux编译的系统,其提供了仿真工具,在上板之前就可以知道Uboot和Kernel是否可以启动。
(1)在工程目录下执行下述打包命令:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>petalinux-<span style="color:#0000ff">package</span> <span style="color:#008000">--prebuilt</span></code></span></span></span>
(2)进行第三阶段仿真:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">petalinux</span>-boot --qemu --prebuilt 3</code></span></span></span>
可以看到在等待文件系统,则表示成功。
也可以单独仿真uboot、kernel:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>petalinux-<span style="color:#0000ff">boot </span>--qemu --u-<span style="color:#0000ff">boot
</span>petalinux-<span style="color:#0000ff">boot </span>--qemu --kernel</code></span></span></span>
还有一些高级用法这里不表。
二、手动移植linux:
(1)获取u-boot\kernel、device tree。
  • 下载xilinx的u-boot、kernel:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>git <span style="color:#0000ff">clone</span> https:<span style="color:#008000">//github.com/Xilinx/u-boot-xlnx.git</span>
git <span style="color:#0000ff">clone</span> https:<span style="color:#008000">//github.com/Xilinx/linux-xlnx.git</span></code></span></span></span>
git checkout 检出想使用的版本,git tag查看所有可用的版本。
u-boot 2018.3貌似没得zynq_zc702_defconfig这个配置文件,可检出到2018.1拷贝一份。
确保含有device tree文件,没有就要下载并导入到SDK的仓库中:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>git <span style="color:#0000ff">clone</span> https:<span style="color:#008000">//github.com/Xilinx/device-tree-xlnx</span></code></span></span></span>
(2)设备树编译:
  • 工程导入SDK生成设备树:就是新建个设备树工程。
  • 设备树信息导入linux中生成dtb文件:
导入bsp信息:
右键命令行中运行:
首先source下SDK的settings.sh环境,source petalinux的sh文件也是一样的:
归集dts文件到一个文件中:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#0000ff">cpp</span> <span style="color:#0000ff">-nostdinc</span> <span style="color:#0000ff">-I</span> <span style="color:#0000ff">include</span> <span style="color:#0000ff">-I</span> <span style="color:#0000ff">arch</span>  <span style="color:#0000ff">-undef</span> <span style="color:#0000ff">-x</span> <span style="color:#0000ff">assembler-with-cpp</span>  <span style="color:#0000ff">system-top</span>.dts <span style="color:#0000ff">system-top</span>.dts.preprocessed</code></span></span></span>
编译设备树,生成dtb:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#0000ff">dtc</span> <span style="color:#0000ff">-I</span> <span style="color:#0000ff">dts</span> <span style="color:#0000ff">-O</span> <span style="color:#0000ff">dtb</span> <span style="color:#0000ff">-i</span> . <span style="color:#0000ff">-o</span> <span style="color:#0000ff">devicetree</span>.dtb <span style="color:#0000ff">system-top</span>.dts.preprocessed</code></span></span></span>
可以看到文件夹下生成了dtb文件:
(3)编译uboot:2018.3没得zc702,所以这里检出了2018.1的版本。
这里可以使用zc702的defconfig文件,其在xil_source/u-boot-xlnx/configs路径下。
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#ff0000">CONFIG_ARM</span>=y
<span style="color:#ff0000">CONFIG_SYS_CONFIG_NAME</span>=<span style="color:#a31515">"zynq_zc70x"</span>
<span style="color:#ff0000">CONFIG_ARCH_ZYNQ</span>=y
<span style="color:#ff0000">CONFIG_SYS_TEXT_BASE</span>=0x4000000
<span style="color:#ff0000">CONFIG_SYS_MALLOC_F_LEN</span>=0x800
<span style="color:#ff0000">CONFIG_IDENT_STRING</span>=<span style="color:#a31515">" Xilinx Zynq ZC702"</span>
<span style="color:#ff0000">CONFIG_SPL_STACK_R_ADDR</span>=0x200000
<span style="color:#ff0000">CONFIG_DEFAULT_DEVICE_TREE</span>=<span style="color:#a31515">"zynq-zc702"</span>
<span style="color:#ff0000">CONFIG_DEBUG_UART</span>=y
<span style="color:#ff0000">CONFIG_DISTRO_DEFAULTS</span>=y
<span style="color:#ff0000">CONFIG_FIT</span>=y
<span style="color:#ff0000">CONFIG_FIT_SIGNATURE</span>=y
<span style="color:#ff0000">CONFIG_FIT_VERBOSE</span>=y
<span style="color:#ff0000">CONFIG_BOOTCOMMAND</span>=<span style="color:#a31515">"run $modeboot || run distro_bootcmd"</span>
<span style="color:#008000"># CONFIG_DISPLAY_CPUINFO is not set</span>
<span style="color:#ff0000">CONFIG_SPL</span>=y
<span style="color:#ff0000">CONFIG_SPL_STACK_R</span>=y
<span style="color:#ff0000">CONFIG_SPL_OS_BOOT</span>=y
<span style="color:#ff0000">CONFIG_SYS_PROMPT</span>=<span style="color:#a31515">"Zynq> "</span>
<span style="color:#ff0000">CONFIG_CMD_THOR_DOWNLOAD</span>=y
<span style="color:#ff0000">CONFIG_CMD_EEPROM</span>=y
<span style="color:#ff0000">CONFIG_CMD_MEMTEST</span>=y
<span style="color:#ff0000">CONFIG_CMD_DFU</span>=y
<span style="color:#008000"># CONFIG_CMD_FLASH is not set</span>
<span style="color:#ff0000">CONFIG_CMD_FPGA_LOADBP</span>=y
<span style="color:#ff0000">CONFIG_CMD_FPGA_LOADFS</span>=y
<span style="color:#ff0000">CONFIG_CMD_FPGA_LOADMK</span>=y
<span style="color:#ff0000">CONFIG_CMD_FPGA_LOADP</span>=y
<span style="color:#ff0000">CONFIG_CMD_GPIO</span>=y
<span style="color:#ff0000">CONFIG_CMD_I2C</span>=y
<span style="color:#ff0000">CONFIG_CMD_MMC</span>=y
<span style="color:#ff0000">CONFIG_CMD_SF</span>=y
<span style="color:#ff0000">CONFIG_CMD_USB</span>=y
<span style="color:#008000"># CONFIG_CMD_SETEXPR is not set</span>
<span style="color:#ff0000">CONFIG_CMD_TFTPPUT</span>=y
<span style="color:#ff0000">CONFIG_CMD_CACHE</span>=y
<span style="color:#ff0000">CONFIG_CMD_EXT4_WRITE</span>=y
<span style="color:#ff0000">CONFIG_OF_EMBED</span>=y
<span style="color:#008000">#CONFIG_ENV_IS_IN_SPI_FLASH=y</span>
<span style="color:#ff0000">CONFIG_NET_RANDOM_ETHADDR</span>=y
<span style="color:#ff0000">CONFIG_SPL_DM_SEQ_ALIAS</span>=y
<span style="color:#ff0000">CONFIG_DFU_MMC</span>=y
<span style="color:#ff0000">CONFIG_DFU_RAM</span>=y
<span style="color:#ff0000">CONFIG_FPGA_XILINX</span>=y
<span style="color:#ff0000">CONFIG_DM_GPIO</span>=y
<span style="color:#ff0000">CONFIG_MMC_SDHCI</span>=y
<span style="color:#ff0000">CONFIG_MMC_SDHCI_ZYNQ</span>=y
<span style="color:#ff0000">CONFIG_SPI_FLASH</span>=y
<span style="color:#ff0000">CONFIG_SPI_FLASH_BAR</span>=y
<span style="color:#ff0000">CONFIG_SF_DUAL_FLASH</span>=y
<span style="color:#ff0000">CONFIG_SPI_FLASH_ISSI</span>=y
<span style="color:#ff0000">CONFIG_SPI_FLASH_MACRONIX</span>=y
<span style="color:#ff0000">CONFIG_SPI_FLASH_SPANSION</span>=y
<span style="color:#ff0000">CONFIG_SPI_FLASH_STMICRO</span>=y
<span style="color:#ff0000">CONFIG_SPI_FLASH_WINBOND</span>=y
<span style="color:#ff0000">CONFIG_PHY_MARVELL</span>=y
<span style="color:#ff0000">CONFIG_PHY_REALTEK</span>=y
<span style="color:#ff0000">CONFIG_PHY_XILINX</span>=y
<span style="color:#ff0000">CONFIG_ZYNQ_GEM</span>=y
<span style="color:#ff0000">CONFIG_DEBUG_UART_ZYNQ</span>=y
<span style="color:#ff0000">CONFIG_DEBUG_UART_BASE</span>=0xe0001000
<span style="color:#ff0000">CONFIG_DEBUG_UART_CLOCK</span>=50000000
<span style="color:#ff0000">CONFIG_ZYNQ_SERIAL</span>=y
<span style="color:#ff0000">CONFIG_ZYNQ_QSPI</span>=y
<span style="color:#ff0000">CONFIG_USB</span>=y
<span style="color:#ff0000">CONFIG_USB_EHCI_HCD</span>=y
<span style="color:#ff0000">CONFIG_USB_ULPI_VIEWPORT</span>=y
<span style="color:#ff0000">CONFIG_USB_ULPI</span>=y
<span style="color:#ff0000">CONFIG_USB_STORAGE</span>=y
<span style="color:#ff0000">CONFIG_USB_GADGET</span>=y
<span style="color:#ff0000">CONFIG_USB_GADGET_MANUFACTURER</span>=<span style="color:#a31515">"Xilinx"</span>
<span style="color:#ff0000">CONFIG_USB_GADGET_VENDOR_NUM</span>=0x03fd
<span style="color:#ff0000">CONFIG_USB_GADGET_PRODUCT_NUM</span>=0x0300
<span style="color:#ff0000">CONFIG_CI_UDC</span>=y
<span style="color:#ff0000">CONFIG_USB_GADGET_DOWNLOAD</span>=y</code></span></span></span>
因为没有用到flash则并修改下述:关掉 不然启动时候会卡死在SPI flash初始化部分
清除中间编译:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#0000ff">make</span> distclean</code></span></span></span>
使用配置文件:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">make</span> CROSS_COMPILE=arm-linux-gnueabihf- zynq_zc702_defconfig</code></span></span></span>
通过下述指令可在界面中uboot进行进一步修改配置:改defconfig文件也可以
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#0000ff">make</span> CROSS_COMPILE=arm-linux-gnueabihf- menuconfig</code></span></span></span>
工具编译:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#0000ff">make</span> CROSS_COMPILE=arm-linux-gnueabihf- tools</code></span></span></span>
编译u-boot:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#0000ff">make</span> CROSS_COMPILE=arm-linux-gnueabihf-</code></span></span></span>
最后把编译生成的u-boot后缀改成.elf。
(4)生成FSBL文件并合成BOOT.BIN:
  • 在SDK中先生新建fsbl工程成FSBL,在src的h文件中添加debug属性,可以在控制台中打印FSBL阶段的启动信息:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#2b91af">#define FSBL_DEBUG_INFO</span></code></span></span></span>
SDK中合成BOOT.BIN文件:uboot.elf、fsbl.elf、bit。
复制BOOT.BIN到SD卡的BOOT分区。上电确认BOOT.BIN是否可以正常启动。
(5)内核编译:
切换到linux-xlnx目录。
注意:错误的解决:

解决 "mkimage" command not found - U-Boot images will not be built

<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>sudo apt-<span style="color:#0000ff">get</span> install u-boot-tools</code></span></span></span>
或者#export PATH=${YOUR_UBOOT_DIR}/tools:$PATH  //编译内核如果要生成uImage,则需要用到mkimage工具,该工具在u-boot/tools下有提供
或者直接复制mkimage到/bin目录即可,生成uimage会用到。
清除老的编译文件:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#008000">#make distclean</span></code></span></span></span>
配置:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#008000">#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_mz7x_defconfig  </span></code></span></span></span>
根据需要对内核进行图形化界面的配置:暂时默认就好
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#008000">#make ARCH=arm menuconfig</span></code></span></span></span>
编译工具:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#008000">#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- prepare scripts  </span></code></span></span></span>
编译内核生成uimage:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#008000">#make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- UIMAGE_LOADADDR=0x8000 uImage  </span></code></span></span></span>
(6)定制文件系统:
  • 文件系统:
这里文件系统使用debian,也可用别的,无所谓。
安装arm环境和debootstrap:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>sudo apt-get <span style="color:#0000ff">install</span> binfmt-support qemu qemu-<span style="color:#0000ff">user</span>-<span style="color:#0000ff">static</span> debootstrap</code></span></span></span>
debian提取:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>sudo debootstrap --arch=armhf --foreign stretch rootfs http:<span style="color:#008000">//cdn.debian.net/debian</span></code></span></span></span>
拷贝到bin路径:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>cp /usr/<span style="color:#0000ff">bin</span>/qemu-arm-static {{刚刚rootfs目录}}/usr/<span style="color:#0000ff">bin</span></code></span></span></span>
在rootfs文件夹的上层执行:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#ff0000">DEBIAN_FRONTEND</span>=noninteractive DEBCONF_NONINTERACTIVE_SEEN=<span style="color:#a31515">true</span> LC_ALL=C LANGUAGE=C LANG=C chroot rootfs debootstrap/debootstrap --second-stage</code></span></span></span>
进入rootfs:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">chroot</span> rootfs</code></span></span></span>
添加源到list:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>echo deb <span style="color:#00b0e8">http:</span>//ftp.cn.debian.org/debian/ stretch main > /etc/apt/sources.list</code></span></span></span>
更新:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>apt-<span style="color:#0000ff">get</span> update</code></span></span></span>
按需安装相关包:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code>apt-<span style="color:#0000ff">get</span> install vim sudo net-tools</code></span></span></span>
debian9启动后网口默认没有自动挂载,开发者可以指定rc.local(注意给权限777)文件中自动执行脚本,使用脚本配置网口,脚本注意给权限chmod +x xx.sh。
而debian9默认不带rc.local。解决方法:https://www.cnblogs.com/flymeng/p/7901062.html
比如我这里新建/etc/rc.local文件:放入了sh_boot.sh文件。
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#2b91af">#!/bin/sh -e</span>
<span style="color:#008000">#</span>
<span style="color:#008000">#rc.local</span><span style="color:#008000">#sh in there</span>
/home/sh_boot.sh
<span style="color:#008000">#sh end </span>
<span style="color:#0000ff">exit</span> 0
EOF</code></span></span></span>
给权限:chmod 777 /etc/rc.local
在home路径放入sh文件,即可。(注意别放在普通用户文件夹下,否则无法上电就执行了)配置网口0使用,根据需要修改。
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">echo</span> <span style="color:#a31515">"Welcome to use,powerd by kingstacker"</span>
<span style="color:#a31515">echo</span> <span style="color:#a31515">"config the eth......."</span><span style="color:#a31515">ifconfig</span> eth0 192.168.0.110 netmask 255.255.255.0 up<span style="color:#a31515">echo</span> <span style="color:#a31515">"config finish."</span></code></span></span></span>
给权限:chmod 777 /home/sh_boot.sh
命令行执行exit 退出。
  • 打包rootfs备份:
文件夹压缩:
切换到rootfs路径,执行:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">tar</span> -zcvf debian9_rootfs.tar.gz ./</code></span></span></span>
文件夹解压到SD卡的rootfs:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">tar</span> zxvf debian9_rootfs.tar.gz -C /media/kingstacker/RootFS</code></span></span></span>
debian9 rootfs文件坚果云分享:
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">https</span>:<span style="color:#008000">//www.jianguoyun.com/p/DdhhnukQ15CBCBjvgrcD </span></code></span></span></span>
普通用户登录及密码:kingstacker
su登录密码:123123
(7)复制相关文件到SD卡的BOOT分区,并添加uEnv.txt文件:
  • SD卡BOOT分区内容如下:bin文件、设备树、txt、内核镜像。
uEnv.txt:其指定了内核传参。表示uart速率115200,使用ttyPS0。根目录为SD卡的第二个分区。
<span style="color:#000000"><span style="background-color:#ffffff"><span style="background-color:#f5f5f5"><code><span style="color:#a31515">bootargs</span>=console=ttyPS0,115200 root=/dev/mmcblk0p2 rw earlyprintk rootfstype=ext4 rootwait
<span style="color:#a31515">load_image</span>=fatload mmc 0 <span style="color:#008000">${kernel_load_address}</span> <span style="color:#008000">${kernel_image}</span> && fatload mmc 0 <span style="color:#008000">${devicetree_load_address}</span> <span style="color:#008000">${devicetree_image}</span>
<span style="color:#a31515">uenvcmd</span>=echo Copying Linux from SD to RAM... && mmcinfo &&  run load_image && bootm <span style="color:#008000">${kernel_load_address}</span> - <span style="color:#008000">${devicetree_load_address}</span></code></span></span></span>
而SD卡的RootFS分区存储了根文件系统:
至此,移植结束,插到板子上,享受劳动成果吧。
以上。

ZYNQ Linux 移植:包含petalinux移植和手动移植debian9相关推荐

  1. Android x86的arm兼容库移植--初步分析及尝试手动移植houdini/ndk_translation

    适用于x86架构的安卓5.0以上需要root,或者离线改文件,但并非全部适用:本文仅为个人经验,未涵盖的地方需要自行探索. 手动移植Android x86的arm兼容库(houdini/ndk_tra ...

  2. 基于STM32的实时操作系统FreeRTOS移植教程(手动移植)

    前言:此文为笔者FreeRTOS专栏下的第一篇基础性教学文章,其主要目的为:帮助读者朋友快速搭建出属于自己的公版FreeRTOS系统,实现后续在实时操作系统FreeRTOS上的开发与运用.操作系统的学 ...

  3. 【FatFs】手动移植FatFs,将SRAM虚拟U盘

    [FatFs]手动移植FatFs,将SRAM转化为文件系统 1. 实验环境 Keil5 MDK-ARM,编译器使用ARM Compiler V6.16 NUCLEO-H723ZG STM32CubeM ...

  4. STM32 HAL库详解 及 手动移植

    源: STM32 HAL库详解 及 手动移植

  5. Linux系统移植:NXP 官板 uboot 移植

    文章目录 Linux系统移植:NXP 官板 uboot 移植 一.获取官板 U-Boot 二.编译下载 U-Boot 源码 三.官方驱动验证 Linux系统移植:NXP 官板 uboot 移植 移植 ...

  6. ZYNQ + Linux

    ZYNQ Linux操作系统移植说明文档 http://xilinx.eetrend.com/content/2019/100018437.html 1,组成 ZYNQ上面移植Linux操作系统包括四 ...

  7. ZYNQ Linux 添加I2C-RTC驱动

    原文链接:ZYNQ:Linux添加I2C-RTC驱动 硬件情况 使用的是DS1338这款RTC时钟芯片,I2C总线对应到PS端的I2C1. 配置 内核 添加有关的驱动: 因为DS1338用的驱动与DS ...

  8. kernel移植——从三星官方内核开始移植

    以下内容源于朱有鹏嵌入式课程的学习,如有侵权,请告知删除. 一.内核移植初体验 1.三星官方移植版内核获取 源码包来于三星的SMDKV210开发板附带的光盘资料,下载地址. 2.构建移植环境 (1)W ...

  9. Zynq Linux 使用 SPI ADC (ADS8332)

    目录 参考文章 一.ADS8332介绍 1. ADS8332通道选择模式 2. ADS8332转换开始(CONVST)控制 3. ADS8332转换结束(EOC)状态 4. ADS8332 TAG模式 ...

最新文章

  1. Spring Boot 与DBunit 配合使用
  2. 构建Flex数据服务程序
  3. 架设自己的WebDAV服务器作为AutoCAD WS的数据存储
  4. 【Python入门】Python列表的11个方法全解
  5. wxWidgets:wxSplitterEvent类用法
  6. Java EE 6 VS Spring 3:Java EE已经杀死了Spring? 没门!
  7. Java时间类之间的转换案例——计算自己活了多少天
  8. java 百度副文本_spring boot 、springMVC环境集成百度ueditor富文本编辑器
  9. 浅析智慧消防巡检系统在高速公路隧道的应用
  10. GPU卡的主流调度平台
  11. 解决MAC launchpad顽固性图标无法删除问题。
  12. 软考(网络工程师)-必备网络知识(笔记一)
  13. 华东交通大学计算机全国排名,华东交通大学世界排名、中国排名、专业排名
  14. w8服务器dns修改,怎么修改DNS Win8修改DNS服务器地址的具体步骤图解
  15. 阿拉伯字母及阿拉伯文排版规则
  16. html 一键复制功能以及下载功能
  17. css 设置文字强制不换行
  18. 视频剪裁尺寸和裁剪时间
  19. 为什么今天要致敬屠呦呦?
  20. 番茄花园GhostXP SP3极速装机版V03

热门文章

  1. windows下安装与使用pix2tex(mathpix免费替代版)
  2. 分库分表Sharding
  3. 《哲学史讲演录》——思辨节选---智者派
  4. Python 取代了 Excel 在银行业务中的地位?
  5. 终极解决Excel科学计数、日期变#号等问题
  6. 活动预告:如何配置数字资产应对大放水和经济不确定性
  7. 牛客题解-------BC100: 直角三角形图案
  8. 通过PreparedStatement预防SQL注入
  9. 百万军中取上将首级如探囊取物, 千万行里改关键源码在弹指瞬间。 功能超强的程序编辑器!
  10. 计算机视觉与图形学-立体匹配专题-金字塔立体匹配网络