ZYNQ 7000系列处理器平台基于BusyBox制作根文件系统

ZYNQ Linux移植实战:从U-Boot到根文件系统全流程解析 嵌入式Linux系统是连接硬件与上层应用的关键软件层,其核心在于通过Bootloader、内核、设备树和根文件系统的协同工作,实现对异构处理器平台的高效管理。Bootloader(如U-Boot)负责硬件初始化和引导内核,Linux内核则作为系统核心,通过设备树这一硬件描述机制动态适配不同硬件配置,最终由根文件系统提供用户态运行环境。这种模块化架构在FPGA+ARM异构平台(如Xilinx ZYNQ)上尤为重要,它能充分发挥硬件可编程与软件灵活性的双重优势。本文以ZYNQ平台为例,深入剖析U-Boot配置、 阅读详情

第一部分:busybox移植

1 下载BusyBox 下载链接:Index of /downloadsicon-default.png?t=O83Ahttps://busybox.net/downloads/

源代码解压缩,并进入到源码目录 

 cd busybox-1.32.0/
make defconfig
make menuconfig
make
make install

执行完上面操作后,源代码同级目录下会生成_install目录,通过cd命令进入_install目录下,添加需要的其他目录。

busybox-1.32.0/_install#  mkdir dev etc etc/dropbear etc/init.d etc/rc.d etc/profile.d mnt opt proc root sys tmp var var/log var/www
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin"
fi
export PATH

if [ "${PS1-}" ]; then
  if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='[\u@\h \W]\# '
    else
      PS1='[\u@\h \W]\$ '
    fi
  fi
fi

if [ -d /etc/profile.d ]; then
  for i in /etc/profile.d/*.sh; do
    if [ -r $i ]; then
      . $i
    fi
  done
  unset i
fi
busybox-1.32.0/_install# cat etc/profile.d/bash_completion.sh

# Check for interactive bash and that we haven't already been sourced.
if [ -n "$BASH_VERSION" -a -n "$PS1" -a -z "$BASH_COMPLETION_COMPAT_DIR" ]; then

# Check for recent enough version of bash.
bash=${BASH_VERSION%.*}; bmajor=${bash%.*}; bminor=${bash#*.}
if [ $bmajor -gt 4 ] || [ $bmajor -eq 4 -a $bminor -ge 1 ]; then
    [ -r "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion" ] && \
        . "${XDG_CONFIG_HOME:-$HOME/.config}/bash_completion"
    if shopt -q progcomp && [ -r /usr/share/bash-completion/bash_completion ]; then
        # Source completion code.
        . /usr/share/bash-completion/bash_completion
    fi
fi
unset bash bmajor bminor

fi

2 创建etc/fstab文件,添加以下内容

LABEL=//tmpfs defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0
none /proc proc defaults 0 0
none /sys sysfs defaults 0 0
none /tmp tmpfs defaults 0 0

3 创建etc/inittab文件

::sysinit:/etc/init.d/rcS
# /bin/ash
#
# Start an askfirst shell on the serial ports
ttyPS0::respawn:-/bin/ash
# What to do when restarting the init
process
::restart:/sbin/init
# What to do before rebooting
::shutdown:/bin/umount -a -r

4 创建etc/passwd文件

root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
test:x:1000:1000::/home/test:/bin/sh

5 创建etc/init.d/rcS文件

#!/bin/sh
echo "Starting rcS..."
echo "++ Mounting filesystem"
mount -t sysfs none /sys
mount -t tmpfs none /tmp
echo "++ Setting up mdev"
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
mkdir -p /dev/pts
mkdir -p /dev/i2c
mount -t devpts devpts /dev/pts
mount -t proc none /proc
/bin/hostname -F /etc/hostname
echo "++ Starting telnet daemon"
telnetd
echo "++ Starting http daemon"
httpd -h /var/www
echo "++ Starting ftp daemon"
tcpsvd 0:21 ftpd ftpd -w /&
echo "++ Starting dropbear (ssh)daemon"
dropbear
/etc/init.d/inotify start
echo "rcS Complete"

for initscript in /etc/rc.d/S[0-9][0-9]*
do
        if [ -x $initscript ] ;
        then
                $initscript start
        fi
done

至此,rootfs文件系统算是创建完成了,把整个_install目录下的文件拷贝到嵌入式板卡上Qflash或EMMC对应的文件系统分区,上电即可正常启动。

其它需要的命令和动态库根据项目需要移植,这里介绍一下dropbear-2024.86的移植(ssh scp)。

第二部分:dropbear的移植

参考:dropbear移植-优快云博客

dropbear下载链接:Index of /dropbear (ucc.asn.au)

1 解压源代码后,进入源码目录,创建_install目录

cd dropbear-2024.86/
mkdir _install

2 在执行configure

 ./configure --prefix=/home/zkgx/library/dropbear-2024.86/_install CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ --with-zlib=/home/zkgx/library/zlib-1.2.11/_install --host=arm-linux

3 修改Makefile

4 执行make和make install

make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
cd _install

5 拷贝到板卡的根文件系统

cp bin/* sbin/* ../../../xilinx/filesys/busybox-1.32.0/_install/usr/sbin/

6 板卡上生产key

cd /etc  
mkdir dropbear  
cd dropbear  
dropbearkey -t rsa -f dropbear_rsa_host_key  
dropbearkey -t dss -f dropbear_dss_host_key 

然后把生成的key拷贝到原始的根文件系统,其它板卡也可以使用。

登录配置参考:根文件系统添加用户登入功能 - 哔哩哔哩 (bilibili.com)

第三部分:inotifywait移植

该软件用于检测文件变化,可以配合sync同步到emmc或qflash。

1 下载编译

git clone https://github.com/inotify-tools/inotify-tools.git

cd inotify-tools

 apt-get install autoconf automake libtool
./autogen.sh

mkdir _install

./configure --prefix=/home/zkgx/library/inotify-tools/_install CC=arm-linux-gnueabihf-gcc CXX=arm-linux-gnueabihf-g++ --host=arm-linux --target=arm-linux --enable-static

make
make install

cd _install/
cp -rf lib/* /home/zkgx/xilinx/filesys/busybox-1.32.0/_install/usr/lib
cp -rf bin/inotifywait /home/zkgx/xilinx/filesys/busybox-1.32.0/_install/usr/bin/

2使用脚本编写

可放在/usr/bin/inotify,作为一个命令使用。

#!/bin/sh

INOTIFYDIR="/root /home /etc/rc.d"
EVENTS=open,create,move,delete,modify,attrib,close_write,moved_to,moved_from

inotifywait -mrq $INOTIFYDIR -e $EVENTS |
    while read path action file; do
        sync;sync;
    done

3启动脚本编写

#! /bin/sh

inotify=/usr/bin/inotify

test -x "$inotify" || exit 0

case "$1" in
  start)
    echo -n "++ Starting inotify"
    start-stop-daemon --start --b --exec $inotify
    echo " "
    ;;
  stop)
    echo -n "Stopping inotify"
    start-stop-daemon --stop --quiet --name inotify
    echo " "
    ;;
  *)
    echo "Usage: /usr/bin/inotify {start|stop}"
    exit 1
esac

exit 0

全部结束!

PetaLinux交叉编译环境搭建(针对Zynq-7000)核心要点 针对Zynq-7000系列,详解PetaLinux交叉编译环境的搭建过程与关键配置步骤,帮助开发者快速部署开发工具链,提升嵌入式开发效率。掌握petalinux工具是实现高效系统构建的核心。 阅读详情

相关推荐

Xilinx Zynq-7000嵌入式系统硬件设计全解析

Zynq-7000系列SoC是集成了ARM处理器与FPGA可编程逻辑的异构计算平台,其核心价值在于软硬协同架构——PS端运行Linux实现协议栈、Web服务与人机交互,PL端承担高速数据通路、硬件加速与时序敏感控制。该架构显著突破纯MCU的性能瓶颈和纯FPGA的软件灵活性短板,广泛应用于工业网关、边缘协议转换器及轻量级网络监控节点等场景。本文围绕XC7Z010核心板展开,深入剖析电源完整性设计(如EA3059四通道DC-DC与MLCC滤波规范)、高速接口实现(RGMII千兆以太网、HDMI TMDS、USB

weixin_35752122的博客 235

zynq制作ramdisk时busybox的小问题解决

为zynq平台制作ramdisk时候,需要使用到busybox这个软件。但是使用时候遇到系统安装的小麻烦,拿出来和大家分享下。 1、 先去busybox官网下载源码。然后拷贝到linux环境中。 2、 然后进入busybox目录中输入命令 make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- defconfig 3、 然后输入命令make me...

buck_wan的博客 622

Zynq-7000 Linux系统搭建全流程:从硬件设计到启动优化

嵌入式Linux系统是连接硬件与复杂应用软件的关键平台,其核心原理在于通过引导加载程序、内核、设备树和根文件系统的协同工作,实现对处理器资源的统一管理和调度。这一技术为嵌入式设备带来了强大的网络通信、图形界面和实时计算能力,广泛应用于工业控制、边缘计算和通信设备等领域。在Xilinx Zynq-7000这类集成FPGA与ARM Cortex-A9的异构SoC上部署Linux,更能充分发挥软硬件协同设计的优势,实现高性能硬件加速与灵活应用处理的结合。本文以ZedBoard为例,详细解析了使用Petalinux

weixin_28406969的博客 562

Zynq7010基于qspi flash linux移植笔记:利用busybox制作ramdisk(2)

Zynq7010基于qspi flash linux移植笔记(2) 三、制作ramdisk文件系统 1、编译busybox 这里用的是busybox-1.28.3,网上很多资源。进入busybox的源码目录,输入 make menuconfig ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- make ARCH=arm CROSS_COMPILE...

tarkelc的专栏 1607

嵌入式Linux系统移植实战:内核、设备树与根文件系统构建全解析

嵌入式Linux系统移植是嵌入式开发的核心基础,其本质是将通用操作系统适配到特定硬件平台。其工作原理围绕三大核心组件协同:Linux内核负责硬件抽象与资源管理,设备树以结构化数据描述硬件拓扑,根文件系统则提供用户空间运行环境与工具集。这项技术的核心价值在于实现硬件与软件的深度解耦,提升系统可移植性与可维护性。在工业控制、物联网网关、消费电子等广泛的应用场景中,稳定可靠的系统移植是产品成功的关键。本文以Zynq-7000平台为例,深入剖析内核配置、设备树调试与根文件系统构建的工程实践,特别是针对串口驱动、Bo

weixin_32496547的博客 314

基于ZYNQ的一站式信号处理平台:从DDS到ADC采集的软硬件协同设计

信号处理系统是现代嵌入式与通信领域的核心技术,其核心原理在于将模拟信号通过模数转换(ADC)进行数字化,再利用数字信号处理算法(如滤波、频谱分析)进行实时分析与变换,最终将结果输出或显示。这种技术架构在通信、雷达、医疗仪器和工业控制等场景中具有极高的工程价值,能够实现高性能、低延迟的实时处理。本文聚焦于一个典型的工程实践案例——基于Xilinx ZYNQ SoC构建的“一站式信号处理平台”。该平台深度整合了**DDS信号生成**与**高速ADC采集**两大核心硬件模块,并通过AXI总线与ARM处理器协同工作

weixin_33976072的博客 359

busybox文件系统制作及分享

如何使用busybox制作文件系统,在qemu中使用。我看了一些制作文章,写的不是很全,有一些点需要注意。下面分享制作过程。注意修改65535 和静态编译,然后是加给文件系统可执行权限,如果启动不了的话。根文件系统分享在百度网盘分享一下 全套内容。包括文件系统,和内核,脚本自己改一下路径即可。链接:https://pan.baidu.com/s/1_dn0oJx6HaeMa1Nn4Tm-7w提取码:1234。

ly1286321的博客 1183

避坑指南:Petalinux定制Linux系统常见问题及解决方案(基于Zynq平台)

本文详细解析了基于Zynq平台的Petalinux定制Linux系统全流程,涵盖环境配置、硬件描述导入、内核定制、编译打包等关键步骤,并针对常见问题提供实用解决方案。特别针对ARM架构的Zynq SoC开发中的典型陷阱,如环境变量配置、HDF文件导入错误等,给出了专业调试建议,帮助开发者高效完成嵌入式Linux系统定制。

weixin_29168675的博客 258

ZYNQ7020文件系统定制设计

遇到此问题执行:sudo apt-get install --no-install-recommends xserver-xorg-core xserver-xorg-input-all xserver-xorg-video-fbdev 此命令。(文件系统用的Koheron提供的ubuntu16.04,将镜像文件解压后可以直接使用文件系统)关于文件系统,自己在做阿里巴巴项目中应用比较多,难度3颗星,主要还是要清楚ZYNQ的异构方式,可以下ARM版本或是ARM64的,ZYNQ是ARM版本。

landyjzlai的博客 712

Zynq7020 busybox创建自己的文件系统

下载busybox:git clone git://git.busybox.net/busybox 1、先清除编译出来的文件及配置文件:make distclean 2、配置busybox 保存退出后,执行make编译 3、执行make install ,会把文件系统生成在busybox源码根目录下的_install目录 4、把交叉编译器里的 arm-xilinx-linux-gnu...

smile_5me的博客 1652

基于zynq的buildroot制作根文件系统

本文基于xilinx的zynq 7z045芯片使用buildroot工具制作根文件系统,并添加网络工具:dropbear、vsftpd、tcpdump、iperf3等,移植mkfs.ext4工具,并添加交叉编译器lib库到根文件系统。

ZYNQ-7000 Linux移植实战:从FSBL到BusyBox传统方式构建

嵌入式Linux系统开发中,从BootROM到根文件系统的启动链路是工程师必须掌握的基础功。理解FSBL、U-Boot、设备树、内核各环节职责,有助于快速定位启动异常。ZYNQ-7000作为ARM+FPGA异构SoC,其Linux移植涵盖交叉编译环境搭建、FSBL生成、U-Boot编译、设备树配置及BusyBox根文件系统构建。本文基于传统手工方式完整走通这一流程,不依赖PetaLinux等自动化工具,逐一剖析每个组件的生成原理与关键参数,帮助开发者在遇到串口无输出、No working FDT等常见故障时

weixin_34228387的博客 365

sophgo sdk v23.03.01

C/C++程序建议在x86主机上使用交叉编译工具链编译生成可执行文件后,再拷贝到SoC目标平台运行。# 创建docker用户组,若已有docker组会报错,没关系可忽略。对于SoC模式,模型转换也需要在docker开发容器中完成;docker开发容器的配置参照前述章节相关内容。6、创建docker容器并进入Docker。# docker命令免root权限执行。# 将当前用户加入docker组。# 重启docker服务。# 安装 docker。3、安装docker。7、SoC 环境配置。

weixin_40723768的博客 912

ZYNQ的 Linux 启动过程

BOOT.BIN 是 ZYNQ 启动的核心,它是由 BootROM 直接加载的容器文件,内部封装了 FSBL、比特流和 U-Boot 等组件。理解并正确生成 BOOT.BIN 是成功启动 ZYNQ Linux 系统的关键第一步。

s0907136的博客 1309

保姆级教程:在Windows 10上为QT5.15.2配置Android开发环境(含SDK/NDK/JDK避坑指南)

本文提供了一份详细的Windows 10环境下为QT5.15.2配置Android开发环境的保姆级教程,涵盖SDK、NDK、JDK的安装与配置,以及常见问题的避坑指南。通过优化安装流程、解决Gradle下载慢等痛点,帮助开发者快速搭建稳定的编译环境,并提供了模拟器配置和调试技巧,确保开发效率。

weixin_30919571的博客 526

Centos7.9使用kubeadm部署K8S集群

使用kubeadm部署一个k8s集群,单master+2worker节点。

lldhsds的专栏 1300

ZYNQ嵌入式Linux移植实战:从FSBL到根文件系统的传统方式全流程

嵌入式Linux系统移植是驱动开发与系统定制的基础技能,尤其面对ZYNQ这类异构SoC时,理解启动链路比单纯使用自动化工具更重要。传统移植方式要求开发者手动编译FSBL、U-Boot、内核、设备树和根文件系统,每一步都涉及硬件配置与地址映射的精确匹配。本文从ZYNQ的双核ARM与可编程逻辑架构出发,剖析BootROM到Linux内核的完整引导流程,深入讲解DDR配置、设备树生成、U-Boot环境变量设置以及根文件系统构建等关键技术点。对于希望掌握底层启动原理、排查启动异常或定制特殊启动逻辑的工程师而言,手工

weixin_34008933的博客 418

Foxglove 介绍以及入门使用教程

Foxglove 是由Foxglove 工作室开发的一套工具集,包括和等组件。跨平台支持:可以在 Windows、macOS 和 Linux 上运行。多协议兼容:支持 ROS、ROS 2、CAN 数据以及其他自定义协议。丰富的可视化功能:可以绘制点云、轨迹、激光雷达数据、IMU 数据等。实时与离线模式:既可以实时监控机器人状态,也可以加载和回放记录的数据文件。Foxglove 的 3D 视图允许你以三维方式查看机器人的运动轨迹、传感器数据和其他几何信息。你可以旋转、缩放和平移视图以获得更好的观察角度。

zolty 1万+

zybo上运行linux,Zybo Board 开发记录: 执行 Linux 操作系统 - 全文

本文转载自:coldnew's blog在 zybo board 开发记录: Zynq 与 LED 闪烁控制 一文中我们谈到了如何透过 C 语言撰写独立的程序,让它控制 Zynq 的处理器系统 (Processing System, PS) 去闪烁 LED 的亮暗。既然 Zynq 的处理器系统 (Processing System, PS) 使用的是 ARM Cortex-A9 的处理器,那当然也...

weixin_28909441的博客 498

保姆级教程:用DaVinci Configurator & Developer从零搭建AUTOSAR OS(TC2xx三核实战)

本文提供了一份详细的AUTOSAR OS配置指南,使用DaVinci Configurator和Developer工具从零开始搭建Infineon TC2xx三核系统。涵盖多核配置协同逻辑、版本兼容性陷阱及验证错误的解决方案,帮助开发者在3小时内构建可运行的多核OS框架。

weixin_33940469的博客 313

Dify智能体开发:Dify文件上传

相较于聊天文本,文档文件能够承载大量的信息,例如学术报告、法律合同。受限于 LLM 自身仅能够支持文件或图片,难以获取文件内更加丰富的上下文信息,应用的使用者不得不手动复制粘贴大量信息与 LLM 对话,增加了许多不必要的使用成本。

王国平的博客 2590

ZYNQ启动流程分析及各环节文件生成流程

ZYNQ启动流程分析及各环节文件生成流程

开阳-英飞凌-小华 1113

DCDC电路断电时放电波形发生震荡和电压跳变问题,如何解决?

DCDC电路断电时放电波形发生震荡和电压跳变问题: 做的一个项目需要用单片机ADC采集电压,要让单片机感应到电压降到3.1V开始往FLASH里存数据,单片机2.4V基本上就工作不了,(根据单片机手册的,擦写的时间在40mS在左右)所以3.1V降到2.4V的时间必须要大于40mS岁以上,在单片机VCC处加了一个100nF的电容,理论仿真下来150mS左右发现存不进去,用示波器抓了一下波形,发现放电时震荡很严重,实际3.1V到2.4V时间只有10ms左右,这个肯定存不进去; 请教师傅说是应该时前级DCDC开关电

**My Coding Family** 1962

Zynq7000开发板实战:从零开始构建自定义Linux系统镜像(含Uboot/Kernel/Device Tree配置)

本文提供了一份详尽的Zynq7000开发板实战指南,手把手教你从零开始构建自定义Linux系统镜像。内容涵盖开发环境搭建、FSBL生成、U-Boot深度定制、Linux内核编译与优化、设备树配置以及轻量级根文件系统制作,最终完成BOOT.BIN和image.ub的打包与SD卡部署,助你彻底掌握嵌入式Linux系统的构建全流程。

t8u9v0w1x的博客 225

实例详解C++程序的五大内存分区

本文详细讲述C++程序在运行时的5大内存分区。 下面使用日常开发中的编程实例,详细介绍一下这5个分区,以便大家能更深刻的理解这5大内存分区。 1、栈内存区 栈内存区是我们用的最多的分区,只要有函数的地方都会使用到这个分区。栈分区是用来存放函数参数及函数局部变量值的内存区,是由编译器在编译时自动分配和释放的。 函数中的参数与函数中的局部变量占用的内存是代码执行到函数(进入函数)是分配的,在............

dvlinker的技术专栏 1万+

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: Ubuntu服务器中ctags安装使用
下一篇: CURL交叉编译
霍传飞
博客等级 码龄11年 15粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值