嵌入式Linux之RK3399:内核buildroot的emmc-img编译原理(一)

rk3128 通过自带buildroot打包开发板根文件系统,重做自己的img镜像 对rk3128要生成自己的qt镜像文件 据说这样才方便大批量的烧录 打包分析 根据九鼎里面带有的编译脚本,把自定义的uboot,kernel,rootfs进行替换,用他的脚本就能打包了 他自己也是这样做的,我们只要qt,就把庞大的andriod去掉 因为kernel 和 uboot 已经做好了,那么自定义的就是 rootfs文件系统 找到roofs文件系统所在 编译roofs 根据下面的判断,把解压之前的文件进行修改就行了 那么出来的文件就是这个 重新做自己的rootfs镜像 准备 博主在桌面建立了 阅读详情
一、脚本分析

在sdk的根目录下有自动化脚本build.sh,build.sh里面定义了emmc-img的功能函数。

function build_emmcimg() {
    local IMG=
    local ROOTFS=
#如果OSNAME未定义,则定义为buildroot
    if [ -z ${OS_NAME} ]; then
        OS_NAME=buildroot
    fi
    if [ x${OS_NAME} = xbuildroot ]; then
        IMG=rk3399-eflasher-buildroot-linux-4.4-arm64-$(date +%Y%m%d).img
        ROOTFS=${TOP_DIR}/buildroot/output/rockchip_rk3399/images/rootfs.ext2
    elif [ x${OS_NAME} = xdebian ]; then
        IMG=rk3399-eflasher-debian9-4.4-armhf-$(date +%Y%m%d).img
        ROOTFS=${TOP_DIR}/rootfs/binary
    else
        echo "Unknow OS: ${OS_NAME}"
        exit 1
    fi
    prepare_image_for_friendlyelec_eflasher ${OS_NAME} ${ROOTFS} && (cd ${SDFUSE_DIR} && ./mk-emmc-image.sh ${OS_NAME}) && {
        echo "-----------------------------------------"
        echo "Run the following for sdcard install:"
        echo "    dd if=out/${IMG} of=/dev/sdX bs=1M"
        echo "-----------------------------------------"
    }
}

显然,在emmc-img函数里面真正起作用的是prepare_image_for_friendlyelec_eflasher函数,该函数同样在build.sh里面定义。

function copy_and_verify(){
	if [ ! -f $1 ]; then
        echo "not found: $1"
		echo "$3"
		exit 1
	fi
	cp $1 $2
}  
function prepare_image_for_friendlyelec_eflasher(){
    local OS_DIR=$1
    local ROOTFS=$2
    ###如果pwd/friendlyelec/rk3399/sd-fuse_rk3399/buildroot目录不存在就创建一个
    if [ ! -d ${SDFUSE_DIR}/${OS_DIR} ]; then
        mkdir ${SDFUSE_DIR}/${OS_DIR}
    fi
    ###存在就清空目录下已经存在的文件
    rm -rf ${SDFUSE_DIR}/${OS_DIR}/*

    ###############################
    ###将已经编译出来的img文件重命名并拷贝到${SDFUSE_DIR}/${OS_DIR}####
    ###############################
    copy_and_verify $TOP_DIR/u-boot/rk3399_loader_v1.22.119.bin ${SDFUSE_DIR}/${OS_DIR}/MiniLoaderAll.bin "error: please build uboot first."
    copy_and_verify $TOP_DIR/u-boot/uboot.img ${SDFUSE_DIR}/${OS_DIR} "error: please build uboot first."
    copy_and_verify $TOP_DIR/u-boot/trust.img ${SDFUSE_DIR}/${OS_DIR} "error: please build uboot first."
    copy_and_verify $TOP_DIR/kernel/kernel.img ${SDFUSE_DIR}/${OS_DIR} "error: please build kernel first."
    copy_and_verify $TOP_DIR/kernel/resource.img ${SDFUSE_DIR}/${OS_DIR} "error: please build kernel first."

    ###############################
    ######## ramdisk      ########
    ###SDFUSE_DIR=pwd/friendlyelec/rk3399/sd-fuse_rk3399
    ###############################
    copy_and_verify ${SDFUSE_DIR}/prebuilt/idbloader.img ${SDFUSE_DIR}/${OS_DIR} ""
    copy_and_verify ${SDFUSE_DIR}/prebuilt/boot.img ${SDFUSE_DIR}/${OS_DIR} ""

    ###############################
    ######## custom rootfs ########
    ###############################
    FA_TMP_DIR=$TOP_DIR/friendlyelec/tmp-rootfs
    rm -rf $FA_TMP_DIR
    mkdir -p $FA_TMP_DIR

    if [ -f ${ROOTFS} ]; then
        mkdir -p $FA_TMP_DIR/mnt
        copy_and_verify ${ROOTFS} $FA_TMP_DIR/rootfs-org.img "error: please build rootfs first."
        mount -t ext4 -o loop $FA_TMP_DIR/rootfs-org.img $FA_TMP_DIR/mnt
        mkdir $FA_TMP_DIR/rootfs
        cp -af $FA_TMP_DIR/mnt/* $FA_TMP_DIR/rootfs
        umount $FA_TMP_DIR/mnt
        rm -rf $FA_TMP_DIR/mnt
    elif [ -d ${ROOTFS} ]; then
        mkdir $FA_TMP_DIR/rootfs
        echo "Coping rootfs ..."
        cp -af ${ROOTFS}/* $FA_TMP_DIR/rootfs
        clean_device_files $FA_TMP_DIR/rootfs
    else
        echo "error: please build rootfs first."
        exit 1
    fi

    cat << 'EOL' > $FA_TMP_DIR/rootfs/etc/fstab
    # <file system>                 <mount pt>              <type>          <options>               <dump>  <pass>
    proc                            /proc                   proc            defaults                0       0
    devpts                          /dev/pts                devpts          defaults,gid=5,mode=620 0       0
    tmpfs                           /dev/shm                tmpfs           mode=0777               0       0
    tmpfs                           /tmp                    tmpfs           mode=1777               0       0
    tmpfs                           /run                    tmpfs           mode=0755,nosuid,nodev  0       0
    sysfs                           /sys                    sysfs           defaults                0       0
    debug                           /sys/kernel/debug       debugfs         defaults                0       0
    pstore                          /sys/fs/pstore          pstore          defaults                0       0
EOL

    #kernel modules
    KER_MODULES_OUTDIR=/tmp/output_rk3399_kmodules
    mkdir -p $FA_TMP_DIR/rootfs/lib/modules
    if [ -d $KER_MODULES_OUTDIR/lib/modules ]; then
        cp -af $KER_MODULES_OUTDIR/lib/modules/* $FA_TMP_DIR/rootfs/lib/modules/
    else
        echo "error: please build kernel first."
        exit 1
    fi

    #fs-overlay
    rsync -a --exclude='.git' $TOP_DIR/friendlyelec/rk3399/fs-overlay-64/* $FA_TMP_DIR/rootfs/

    # oem
    [ -d $FA_TMP_DIR/rootfs/oem ] || mkdir $FA_TMP_DIR/rootfs/oem
    cp -af $TOP_DIR/device/rockchip/oem/oem_normal/* $FA_TMP_DIR/rootfs/oem
    # userdata
    [ -d $FA_TMP_DIR/rootfs/userdata ] || mkdir $FA_TMP_DIR/rootfs/userdata
    cp -af $TOP_DIR/device/rockchip/userdata/userdata_normal/* $FA_TMP_DIR/rootfs/userdata

    # misc
    rm -f $FA_TMP_DIR/rootfs/misc
    mkdir $FA_TMP_DIR/rootfs/misc

    # remove /dev/console
    rm -f $FA_TMP_DIR/rootfs/dev/console


    MKFS=${SDFUSE_DIR}/tools/make_ext4fs
    ROOT=${FA_TMP_DIR}/rootfs

    # calc image size
    ROOTFS_SIZE=`du -s -B 1 ${ROOT} | cut -f1`
    MAX_IMG_SIZE=7100000000
    TMPFILE=`tempfile`
    ${MKFS} -s -l ${MAX_IMG_SIZE} -a root -L rootfs /dev/null ${ROOT} > ${TMPFILE}
    IMG_SIZE=`cat ${TMPFILE} | grep "Suggest size:" | cut -f2 -d ':' | awk '{gsub(/^\s+|\s+$/, "");print}'`
    cat $TMPFILE
    rm -f ${TMPFILE}

    if [ ${ROOTFS_SIZE} -gt ${IMG_SIZE} ]; then
            pt_error "IMG_SIZE less than ROOTFS_SIZE, why?"
            exit 1
    fi

    # make rootfs.img
    ${MKFS} -s -l ${IMG_SIZE} -a root -L rootfs $FA_TMP_DIR/rootfs.img ${ROOT}
    copy_and_verify $FA_TMP_DIR/rootfs.img ${SDFUSE_DIR}/${OS_DIR}/rootfs.img " "
    rm -rf $FA_TMP_DIR

    # fill size to parameter.txt and partmap.txt
    ROOTFS_PARTITION_SIZE=`printf "0x%X" $(($IMG_SIZE/512))`
    ROOTFS_PARTITION_ADDR=0x00030000
    USERDATA_PARTITION_ADDR=`printf "0x%X" $((${ROOTFS_PARTITION_ADDR}+${ROOTFS_PARTITION_SIZE}))`

    ###############################
    ######## parameter.txt ########
    ###############################
cat > ${SDFUSE_DIR}/${OS_DIR}/parameter.txt << EOL
FIRMWARE_VER: 6.0.1
MACHINE_MODEL: RK3399
MACHINE_ID: 007
MANUFACTURER: RK3399
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 3399
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
#KERNEL_IMG: 0x00280000
#FDT_NAME: rk-kernel.dtb
#RECOVER_KEY: 1,1,0,20,0
#in section; per section 512(0x200) bytes
CMDLINE: root=/dev/mmcblk1p7 rw rootfstype=ext4 data=/dev/mmcblk1p8 consoleblank=0 mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(trust),0x00002000@0x00006000(misc),0x00006000@0x00008000(resource),0x00010000@0x0000e000(kernel),0x00010000@0x0001e000(boot),${ROOTFS_PARTITION_SIZE}@0x00030000(rootfs),-@${USERDATA_PARTITION_ADDR}(userdata)

EOL

    mkdir -p ${SDFUSE_DIR}/${OS_DIR}/sd-boot
    ##########################################################
    ######## param4sd.txt (parameter.txt for sd-boot) ########
    ##########################################################
cat > ${SDFUSE_DIR}/${OS_DIR}/sd-boot/param4sd.txt << EOL
FIRMWARE_VER: 6.0.1
MACHINE_MODEL: RK3399
MACHINE_ID: 007
MANUFACTURER: RK3399
MAGIC: 0x5041524B
ATAG: 0x00200800
MACHINE: 3399
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
#KERNEL_IMG: 0x00280000
#FDT_NAME: rk-kernel.dtb
#RECOVER_KEY: 1,1,0,20,0
#in section; per section 512(0x200) bytes
CMDLINE: root=/dev/mmcblk0p1 rw rootfstype=ext4 data=/dev/mmcblk0p2 consoleblank=0 mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(trust),0x00002000@0x00006000(misc),0x00006000@0x00008000(resource),0x00010000@0x0000e000(kernel),0x00010000@0x0001e000(boot),${ROOTFS_PARTITION_SIZE}@0x00030000(rootfs),-@${USERDATA_PARTITION_ADDR}(userdata)

EOL

    ROOTFS_PARTITION_SIZE=`printf "0x%X" ${IMG_SIZE}`
    ROOTFS_PARTITION_ADDR=0x6000000
    USERDATA_PARTITION_ADDR=`printf "0x%X" $((${ROOTFS_PARTITION_ADDR}+${ROOTFS_PARTITION_SIZE}))`

    #########################################
    ######## partmap.txt for sd-boot ########
    #########################################
cat > ${SDFUSE_DIR}/${OS_DIR}/sd-boot/partmap.txt << EOL
flash=mmc,1:loader:idb:0x8000,0x280000:idbloader.img;
flash=mmc,1:env:env:0x3F8000,0x8000;
flash=mmc,1:parm:parm:0x400000,0x0400000:param4sd.txt;
flash=mmc,1:uboot:raw:0x800000,0x0400000:uboot.img;
flash=mmc,1:trust:raw:0xC00000,0x0400000:trust.img;
flash=mmc,1:misc:raw:0x1000000,0x0400000;
flash=mmc,1:resc:raw:0x1400000,0x0C00000:resource.img;
flash=mmc,1:kern:raw:0x2000000,0x2000000:kernel.img;
flash=mmc,1:boot:raw:0x4000000,0x2000000:boot.img;
flash=mmc,1:rootfs:ext4:0x6000000,${ROOTFS_PARTITION_SIZE}:rootfs.img;
flash=mmc,1:userdata:ext4:${USERDATA_PARTITION_ADDR},0x0:userdata.img;

EOL

    # gen empty userdata.img
    if [ ! -f ${SDFUSE_DIR}/${OS_DIR}/userdata.img ]; then
        USERDATA_SIZE=104857600
        TMPDIR=`mktemp -d`
        ${MKFS} -s -l ${USERDATA_SIZE} -a root -L userdata ${SDFUSE_DIR}/${OS_DIR}/userdata.img ${TMPDIR}
        rm -rf ${TMPDIR}
    fi
}
1)

在prepare_image_for_friendlyelec_eflasher函数中,kernel编译出来的boot.img不能用,而是选择${SDFUSE_DIR}/prebuilt/boot.img。

2)

创建分区文件的操作是
cat > $ {SDFUSE_DIR}/$ {OS_DIR}/parameter.txt << EOL
…
EOL
显然可以改变的只有根文件的大小ROOTFS_PARTITION_SIZE和userdata分区起始地址USERDATA_PARTITION_ADDR。
如果是自己编译的根文件系统,需要修改ROOTFS_PARTITION_SIZE的大小,然后对应修改USERDATA_PARTITION_ADDR的值。

二、BUG分析

1、下载rootfs显示失败时,可能是rootfs.img的大小超过分区的大小,修改ROOTFS_PARTITION_SIZE和userdata和USERDATA_PARTITION_ADDR。

使用buildroot创建自己的linux镜像 使用buildroot,整体还是简单的,配置简单,生成文件比较小,适合嵌入式系统。创建后,直接包含了文件系统和内核,后只需要安装一个bootloader即可对于其他结构,可能需要下载默认config方便配置。 阅读详情

相关推荐

buildroot进行个性化rootfs.img

在buildroot/package目录下建立helloworld,并在该目录下建立Config.in 和 helloworld.mk 两个文件。在external 下创建helloworld文件夹,并在该文件夹下创建.c源码工程文件和Makefile文件。helloworld.mk里的宏,除了BR2开头的,其余宏都要以HELLOWORLD_ 开头。编译完成并进行挂载后可以看到home下有app/app.txt 目录结构。在package/下找到Config.in文件,在最后添加自己的软件。

weixin_44929464的博客 718

Buildroot构建指南——根文件系统(Rootfs)

Buildroot构建指南——根文件系统(Rootfs) Buildroot的Rootfs构建流程有一个大框架,有些部分是Buildroot系统做好的,有些细节需要自己来实现,Rootfs也是Buildroot中最为复杂的部分。

zhou_chenz的博客 1万+

Buildroot根文件系统之psplash加载logo和进度条

Buildroot根文件系统之psplash加载logo和进度条。

seekerzjy的博客 1624

buildroot详解和分析

最后make all执行Buildroot主目录下的Makefile,生成你想要的image。Package-specific:-------------------------------------------------------------------------------对package配置。all - make world----------------------------------------------编译整个系统。

xqhrs232的专栏 1209

嵌入式Linux&Android开发-SDK下载&编译

目录 一、SDK下载 二、SDK编译 2.1 手动编译(一般不用) 2.2 脚本编译(推荐使用) 2.3 编译可能出现的错误 2.4 生成固件说明 2.5 打包统一固件(发布时才用) 一、SDK下载 从网盘下载完成后放到本机位置~/rk3399_embeded 网盘路径为->embeded_sdk->3399_embeded mkdir -p ~/rk3399 cd ~/rk3399 cp rk3399-embeded.tgz ~/rk3399 计算md5sum确认

嵌入式成长手册 1722

Image-rk3399-Android11测试固件-20230224-1844.7z

Image-rk3399_Android11测试固件_20230224_1844.7z AIO-3399J的测试报告 RK3399(AIO-3399J开发板)的Android10 2023/2/16 9:21 Android11/10 【已经确认实现的功能】 0、横屏、永不休眠、ll命令 1、HDMI显示 2、2个USB = 1个USB3.0 + 1个USB2.0 2个鼠标测试。 3、AP6356S的 WIFI:tv.sohu.com 5.8G的SSID:13430494987 BT:接受JPG图片 4、RJ45以太网 【等待实现的功能】 1、录音 ? 2、播音 【未来得及确认的功能】 1、4K/8K视频播放 3、U盘、USB键盘。 4、TF卡

章鱼哥听歌

章鱼哥唱歌

qq_44191452的博客 699

wsl2内核版本和模块版本不一致解决方法

** /lib/modules/…build: No such file or directory错误解决办法这篇文章历时1个月整,从4月5日一直到5月5日,这一问题才得以解决。

m0_60634555的博客 5098

Linux内核开发_将Linux内核打包成img文件

接着之前两个文章我们已经编译了Linux内核和制作了一个文件系统 这一步我们将它们打包成一个img软盘文件 1.使用DD命令创建一个镜像的img文件 sudo dd if=/dev/zero of=my_linux.img bs=1M count=128 2.使用fdisk命令给镜像文件分区 sudo fdisk my_linux.img 2.1输入n命令创建分区 2.2输入p创建主分区 2.3分区号设置为1,代表我们的主引导分区 2.4第一个扇区大小输入默认值,或

17岁boy的博客 5806

tiktok算法协议研究

经过上述分析,可以确定目标字符串来源于一段 JSON 数据,而这段 JSON 数据来自于一个经过加密的本地文件。对字符串 "sdi_v2" 进行 SHA-1 计算,得到 20 字节的结果;将第一步得到的数据进行MD5计算,生成16字节的结果;将第二步的结果转换为十六进制字符串,从而得到 32 字节的密钥。写这种算法分析的帖子真的是太无聊了,就先分析到这里吧,后续有机会再来谈下被加密的本地文件是怎么来的!!自我感觉TT的算法并不难,就是量太大了,所以我想问问有没有感兴趣的朋友来一起分析,欢迎联系。

2503_90751938的博客 2560

InSAR数据获取实战指南:Sentinel-1、精密轨道与ALOS PALSAR DEM的下载与应用

本文详细介绍了InSAR数据获取的实战指南,重点解析Sentinel-1数据、精密轨道数据(OPOD)和ALOS PALSAR DEM的下载与应用技巧。通过实际案例和代码示例,帮助读者掌握数据筛选、下载加速、校验及多源数据协同使用的关键方法,提升地面形变监测的精度与效率。

weixin_29215815的博客 428

eMMC是什么东西?Buildroot中生成的emmc.img 和 zImage两个文件有何区别?

zImage是Linux 内核的压缩镜像文件。它是内核源码编译后的产物,包含了启动操作系统所需的核心功能,比如硬件驱动、任务调度、内存管理等。emmc.img是一个完整的存储镜像文件,通常包含引导加载程序、内核镜像、设备树文件和根文件系统等。这是用来写入目标设备存储器(如 eMMC、SD 卡或 NAND Flash)的文件,表示整个嵌入式 Linux 系统的布局。

昊虹AI笔记 1110

CCF CSP历年题解(python)

菜鸡一枚,没参加过算法竞赛,单纯为了抵研究生考试复试才刷题,通过写博客记录下来,希望能和大家互相交流,代码质量不高,大家见谅。 因为考研等原因,题目不定期更新… 第一题 201312-1出现最多次数的数 ...

weixin_44690402的博客 5001

Linux第61步_“buildroot”构建根文件系统第3步_烧写根文件系统到EMMC中_并完善开发板配置

学习Linux第61步,就是烧写根文件系统到EMMC中,并完善开发板配置,至此根文件系统学习完了,后面要学习linux驱动开发。

weixin_42550185的博客 1794

fpga在线升级 linux_仅5000行Verilog代码、可在FPGA上跑轻量级Linux系统的RISC-V内核

本文发布于www.hackster.io,由东京理工大学的计算机学院开发,专用于教学与加速用(苏老师也一直认为这是RISC-V当前的主要方向)。目前市场上开源的RISC-V内核已经很多,但很少有公开的RISC-V计算系统是非常轻型且能跑Linux系统的。这一款RISC-V内核就可以运行在FPGA上,用Verilog编写的,需要很少硬件的资源就能跑起来,所以可以运行在一个低成本的FPGA上。来看一下...

weixin_34083807的博客 1859

ARM架构UOS实战:从源码编译Qt 5.15.2到定制Qt Creator的全流程解析

本文详细解析了在ARM架构统信UOS系统上,从源码编译Qt 5.15.2到定制Qt Creator开发环境的完整流程。内容涵盖环境准备、依赖部署、源码配置、编译优化、错误处理及IDE集成,旨在帮助开发者在国产化平台上构建自主可控的高性能Qt开发环境,解决特定ARM平台的兼容性与性能优化问题。

mango的博客 407

SAM9X60 curiosity开发板,buildroot编译sdcard.img

linux sam9x60

Ning的博客 1万+

第八届传智杯WPS智能办公能力挑战赛练习题库

本文是关于WPS Office软件操作知识的选择题汇总,内容涵盖WPS文字、表格和演示三大组件的常用功能。主要包括:云文档协同编辑、文本框插入、幻灯片打印设置、数据排序与筛选、函数应用(如SUMIF、COUNT)、动画效果设置、格式刷使用、页眉页脚设置、单元格引用类型等基础操作要点。同时涉及计算机基础概念如二进制、ROM存储器等。题目以单选和多选形式呈现,附带详细答案解析,全面检验用户对WPS办公软件的功能掌握程度和实际操作能力,适用于办公软件技能培训和水平测试。

qq_73044452的博客 1413

制作imx6ull Linux系统的img镜像

制作imx6ull Linux系统的img镜像 参考链接:https://blog.csdn.net/qingtian11112/article/details/99825257 相信玩过树莓派或者香橙派的人都知道,我们利用SD卡启动Linux系统的时候,是将官网提供的img镜像通过Win32 Disk Imager软件将img镜像烧写到SD卡,然后启动系统的。imx6ull我们常用的就是通过USB刷机,也就是通过mfgtools工具将uboot kernel dtb rootfs这些文件烧写到emmc n

mzy2364的博客 3323

ETAS工具导入DBC生成Com协议栈

ETAS工具导入DBC主要也是生成arxml用的,ETAS推荐使用Cobra导入,本文介绍导入过程及注意事项不管是导入DBC还是arxml,本质上都是为了生成对应的com协议栈,目的是为了减少重复的工作量,所以,前期定义好收发的矩阵很重要,一般导入一次之后,后面就可以按变更点手动更改了。

赞的博客 1696

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

RK3399 驱动开发 _ 03 - Android8.1编译自己驱动到内核

在Android系统开发中,经常需要编译自己的驱动到内核。添加驱动文件关联上下级驱动编译文件重新编译内核。

chenkanuo的博客 559

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

RK3399 buildroot编译、重新编译、增量编译

添加编译包 添加quectel-CM app OK3399-linux-source$ ls app/quectel-CM build.sh ethtool-copy.h main.c MPQCTL.h MPQMUX.h QMIThread.c quectel-CM quectel-qmi-proxy udhcpc.c util.h default.script GobiNetCM.c Makefile

横山郡守的博客 3302

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

使用buildroot 构建嵌入式linux镜像

制作Linux镜像有三种常见的工具。

qq_50527994的博客 303

buildroot使用介绍

进入buildroot首先映入眼帘的是一系列目录,简要介绍如下:├── arch: 存放CPU架构相关的配置脚本,如arm/mips/x86,这些CPU相关的配置,在制作工具链时,编译uboot和kernel时很关键.├── board├── boot├── configs: 放置开发板的一些配置参数.├── dl: 存放下载的源代码及应用软件的压缩包.├── docs: 存放相关的参考文档.├── fs: 放各种文件系统的源代码.

bo_的博客 2381

使用buildroot编译完整系统【IMX6ULLPRO】

100ask-imx6ull-pro- 512d-systemv-v1.img重命名为。机器性能不同,编译时间不同。性能差的电脑,有可能需要等待。配置文 件为例,在 ubuntu。目录里,就可以使用工具烧写到。编译成功后文件输出路径为。

weixin_49001476的博客 1296

rk3399在linux机上烧写img,烧写固件 — TB-96AI documentation

Window主机烧写固件¶1、安装Windows PC端USB驱动(首次烧写执行)。2、双击DriverAssitant_v4.5DriverInstall.exe打开安装程序,点击“驱动安装”按提示安装驱动即可,安装界面如下所示:3、Type-C线连接主机端的USB接口和RK3399Pro TB-96AI开发板的Type-C接口,进入烧写模式。4、将固件解压到AndroidTool_Releas...

weixin_39765869的博客 788
上一篇: Linux之shell编程:if语法
下一篇: 基于ubuntu19.10的嵌入式linux根文件系统制作(一)
EEer!
博客等级 码龄11年 407粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值