ZYNQ Linux 移植:包含petalinux移植和手动移植debian9

博客围绕建立BSP展开,涉及SD卡分区,将u-boot、kernel、rootfs移植到SD卡。介绍了下载xilinx的u-boot、kernel,在SDK中导入工程生成设备树和dtb文件,新建fsbl工程并添加debug属性。还提及解决“mkimage”命令缺失问题,以及文件系统打包和SD卡BOOT分区内容。
问题:
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上。
分两个区即可,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分区存储了根文件系统:
 
至此,移植结束,插到板子上,享受劳动成果吧。
 
以上。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值