精华内容
下载资源
问答
  • 背景:开发板RK3288上跑的是LUbuntu系统,现在需要将此系统的根文件系统打包成img。 整体操作一共三步: 1、将Rk3288的整个根文件系统的文件,通过ssh拷贝到PC系统(Ubuntu); 2、将此拷贝的全部文件,加载到虚拟...

    背景:开发板RK3288上跑的是LUbuntu系统,现在需要将此系统的根文件系统打包成img。
    整体操作一共三步:
    1、将Rk3288的整个根文件系统的文件,通过ssh拷贝到PC系统(Ubuntu);
    2、将此拷贝的全部文件,加载到虚拟光盘中,制作成img文件;
    3、将img文件,再烧回RK3288开发板,进行测试。
    工具:
    1、RK3288上的LUbuntu系统需要安装:ssh、rsync;
    2、PC电脑上安装:ssh、rsync;

    下面是详细的操作步骤:

    一、从设备导出根文件系统

    1、给开发板接好显示器、鼠标键盘,启动开发板。先用键盘登陆ubuntu用户,如果连sudo工具都没有,就直接切换到root用户来操作,如下:

    su root
    
    按提示输入密码,密码是做镜像时的设置的。
    

    Firefly默认密码为: firefly
    2、配置网络,为了网络稳定和节省时间,我插得网线。
    3、更新软件列表

    sudo apt-get update
    

    4、vim /etc/ssh/sshd_config 修改ssh配置文件,便于外界访问。(导出本地所有文件)
    Ubuntu环境下SSH服务安装、SSH远程登录以及SSH数据传输(如该没有安装ssh)
    如该root账户没有设置密码,Ubuntu设置root密码:

    sudo passwd root
    
    sudo vim /etc/ssh/sshd_config
    

    如果没有 sshd_config ,需要安装openssh-server

     sudo apt-get install openssh-server
    


    找到PermitRootLogin这项,设置为yes,如图:

    保存退出后,重启sshd:

    /etc/init.d/ssh restart
    
    经过这此修改后就可以远程登陆root帐户了,可以通过ssh工具验证。
    

    要确保,外界可以通过ssh 登录root账户,只有这样才能将本地所有文件导出。(无法ssh登录,需进行ssh的安装和启动)
    5、 先在PC主机(自己电脑为Ubuntu)上创建一个目录,用来同步保存开发板上的文件系统:

    cd ~/Ubuntu/rootfs
    

    mkdir ubuntuBoard
    rsync -avx root@192.168.1.239:/ ubuntuBoard
    **执行上面代码前确保开发板上安装了rsync,开发板执行以下命令可安装rsync

    sudo apt-get install rsync
    

    上一句命令中的 root表示开发板的管理员账户名称,若开发板管理员账户名称为别的,这里需要进行修改。

    上边的IP要根据开发板实际情况修改,信息由ifconfig得到。
    命令执行完后,ubuntuBoard里就保存着和开发板系统上一样的文件系统内容了。

    二、打包生成img文件

    1、制作镜像了,用dd工具创建镜像文件:
    dd if=/dev/zero of=ubuntu.img bs=1M count=3000

    格式化镜像文件,并加入linuxroot卷标:
    sudo mkfs.ext4 -F -L linuxroot ubuntu.img

    挂载镜像并往里面拷入修改后的文件系统:
    mkdir ubuntu-mount
    sudo mount ubuntu.img ubuntu-mount
    sudo cp -rfp ubuntuBoard/* ubuntu-mount
    缷载镜像:
    sudo umount ubuntu-mount
    **
    这样ubuntu.img里就已经有刚才制作的根目录内容了,但ubuntu.img文件大小却是定义的分区大小,不是文件系统的实际大小,所以还要经过一些处理才能发布。
    检查并修复ubuntu.img镜像的文件系统,不熟悉的朋友可以通过网络了解此工具:
    e2fsck -p -f ubuntu.img

    减小ubuntu.img镜像文件的大小:
    resize2fs -M ubuntu.img

    执行上面两命令后,ubuntu.img瘦身不少,可以用来烧录了。

    三、img烧录到设备froot分区

    1、开发板链接Windows电脑,并打开AndroidTools烧录工具,让开发板进入Loading模式;
    2、选择rootfs 分区,并选择前面制作的根文件系统ubuntu.img,进行烧录;
    3、烧录进度100% 后,开发板会自动重启,进入新系统。

    展开全文
  • 本文介绍了如何下载并以ubuntu-base根文件系统为基础,在其上进行自定义的修改,并打包为img文件的过程。 文章目录1 - 下载ubuntu-base2 - 准备挂载根文件系统以进行修改3 - 在ubuntu-base中安装些需要用的包4 - ...

    对了,我最近开通了微信公众号,计划是两边会同步更新,并逐步的会将博客上的文章同步至公众号中。
    感兴趣的朋友可以扫描下方的二维码或者搜索“里先森sements”来关注,欢迎来玩~!
    在这里插入图片描述


    基础性笔记。本文介绍了如何下载并以ubuntu-base根文件系统为基础,在其上进行自定义的修改,并打包为img文件的过程。

    1 - 下载ubuntu-base

    去到 http://cdimage.ubuntu.com/ubuntu-base/releases/18.04.4/release/ 选择你平台上使用的 ubuntu-base。
    值得注意的是,在嵌入式平台上,ubuntu-base只有armhf与arm64(aarch64)版本,没有arm软浮点处理器版本的支持。

    下载完成,解压到目录,这里我们解压到同路径的 raw-rootfs

    $mkdir raw-rootfs
    $sudo tar -xpf ubuntu-base-18.04-base-arm64.tar.gz -C raw-rootfs/
    

    -x:解压文件
    -p:使用原来文件相同的权限来解压文件
    -f:指定解压文件
    -C:解压到

    2 - 准备挂载根文件系统以进行修改

    安装 qemu

    $sudo apt install qemu-user-static
    

    拷贝 qemu-你要部署到的平台的架构-static 到刚刚解压出来的目录

    下载的arm64根文件系统则使用 qemu-aarch64-static
    下载的armhf根文件系统则使用 qemu-arm-static

    否则后续进行chroot的时候可能会提示:
    chroot: cannot run command `/bin/bash’: No such file or directory

    $sudo cp /usr/bin/qemu-aarch64-static ./raw-rootfs/usr/bin/
    

    修改根文件系统软件源

    $ sudo gvim raw-rootfs/etc/apt/sources.list
    

    然后将软件源的地址全部替换,这里我使用的是中科大的软件源

    # See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to
    # newer versions of the distribution.
    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic main restricted
    # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/  bionic main restricted
    
    ## Major bug fix updates produced after the final release of the
    ## distribution.
    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main restricted
    # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/  bionic-updates main restricted
    
    ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
    ## team. Also, please note that software in universe WILL NOT receive any
    ## review or updates from the Ubuntu security team.
    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic universe
    # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/  bionic universe
    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates universe
    # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/  bionic-updates universe
    
    ## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu
    ## team, and may not be under a free licence. Please satisfy yourself as to
    ## your rights to use the software. Also, please note that software in
    ## multiverse WILL NOT receive any review or updates from the Ubuntu
    ## security team.
    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic multiverse
    # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/  bionic multiverse
    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates multiverse
    # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/  bionic-updates multiverse
    
    ## N.B. software from this repository may not have been tested as
    ## extensively as that contained in the main release, although it includes
    ## newer versions of some applications which may provide useful features.
    ## Also, please note that software in backports WILL NOT receive any review
    ## or updates from the Ubuntu security team.
    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse
    # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/  bionic-backports main restricted universe multiverse
    
    ## Uncomment the following two lines to add software from Canonical's
    ## 'partner' repository.
    ## This software is not part of Ubuntu, but is offered by Canonical and the
    ## respective vendors as a service to Ubuntu users.
    # deb http://archive.canonical.com/ubuntu bionic partner
    # deb-src http://archive.canonical.com/ubuntu bionic partner
    
    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted
    # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/  bionic-security main restricted
    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security universe
    # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/  bionic-security universe
    deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security multiverse
    # deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/  bionic-security multiverse
    

    拷贝本机的dns配置文件到根文件系统

    $ sudo cp /etc/resolv.conf raw-rootfs/etc/resolv.conf
    

    编写挂载脚本 mount.sh,注意缩进使用tab而不使用空格

    #!/bin/bash
    mnt() {
    	echo "MOUNTING"
    	sudo mount -t proc /proc ${2}proc
    	sudo mount -t sysfs /sys ${2}sys
    	sudo mount -o bind /dev ${2}dev
    	sudo mount -o bind /dev/pts ${2}dev/pts
    	sudo chroot ${2}
    }
    umnt() {
    	echo "UNMOUNTING"
    	sudo umount ${2}proc
    	sudo umount ${2}sys
    	sudo umount ${2}dev/pts
    	sudo umount ${2}dev
    }
    
    if [ "$1" == "-m" ] && [ -n "$2" ] ;
    then
    	mnt $1 $2
    elif [ "$1" == "-u" ] && [ -n "$2" ];
    then
    	umnt $1 $2
    else
    	echo ""
    	echo "Either 1'st, 2'nd or both parameters were missing"
    	echo ""
    	echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
    	echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
    	echo ""
    	echo "For example: ch-mount -m /media/sdcard/"
    	echo ""
    	echo 1st parameter : ${1}
    	echo 2nd parameter : ${2}
    fi
    

    修改脚本的权限

    $sudo chmod +x mount.sh
    

    运行脚本

    $ source mount.sh -m raw-rootfs/
    

    我们便切换进入了ubuntu-base的根文件系统中
    在这里插入图片描述
    如果要退出并取消挂载可使用

    root@ubuntu:/# exit
    exit
    $ source mount.sh -u raw-rootfs/
    

    3 - 在ubuntu-base中安装些需要用的包

    挂载根文件系统后

    #apt update
    #apt install sudo language-pack-en-base ssh net-tools ethtool ifupdown iputils-ping htop vim kmod network-manager xorg qt5-default openbox make
    #apt upgrade
    #apt install gcc g++
    
    • kmod: 是为了之后使用insmod与lsmod

    • net-tools: ifconfig命令

    • network-manager:使用nmcli之类的命令进行网络管理

    • xorg:安装好X window system环境

    • qt5-default:为了之后跑qt程序

    • openbox:窗口管理

    • make:用以执行Makefile

    • gcc/g++:安装编译器

      这里若是aarch64架构会自动匹配安装对应平台的编译器。例如我这里安装完后,gcc指向的是 aarch64-linux-gnu-gcc-7。查看 gcc -v 可知其生成对象目标平台

      在这里插入图片描述

    4 - 添加一个管理员账号

    先修改目前root账户的密码

    # passwd
    

    添加一个用户

    # adduser 用户名
    

    在 /etc/sudoers 文件中赋予权限

    # vim /etc/sudoers
    

    在这里插入图片描述
    退出挂载的根文件系统

    #exit
    $source mount.sh -u raw-rootfs/
    

    在这里插入图片描述

    到这一步为止,我们已经修改好了一份根文件系统。可以将其使用下面的命令,复制到需要的磁盘位置进行使用

    $ sudo cp -rfp raw-rootfs/* LeeUbuntuBase/
    

    而如果你需要通过 img 镜像文件之类的方式,对板卡进行根文件系统的烧录,继续进行后续的镜像打包流程。

    5 - 镜像打包

    首先用 dd 工具创建一个空文件,这里conut的大小参考你的根文件系统(我这里即raw-rootfs)的大小,这里生成 2G

    $ dd if=/dev/zero of=LeeUbuntuBase.img bs=1M count=2048
    

    使用 mkfs.ext4 来格式化镜像文件,加入卷标 “rootfs”(卷标非必要?)

    $ sudo mkfs.ext4 -F -L rootfs LeeUbuntuBase.img
    

    -L:设置卷标
    -F:强制格式化

    将该镜像文件挂载到一个文件夹上,来读写。将你定制好的根文件系统(raw-rootfs文件夹内)内的文件拷贝到挂载的文件夹内以写入到 img 文件内。

    $ mkdir LeeUbuntuBase
    $ sudo mount LeeUbuntuBase.img LeeUbuntuBase
    $ sudo cp -rfp raw-rootfs/* LeeUbuntuBase/
    

    -r:递归文件夹
    -f:强制
    -p:不拷贝符号链接的目标文件,仅拷贝该符号链接

    卸载镜像。e2fsck 检查镜像的文件系统。resize2fs 减小镜像文件的大小

    $ sudo umount LeeUbuntuBase/
    $ e2fsck -p -f LeeUbuntuBase.img
    $ resize2fs -M LeeUbuntuBase.img
    

    附录

    1 - 开机启动rc.local并唤起图形桌面环境

    在/etc/目录下建立 rc.local 文件,赋予其 +x 属性,然后在rc.local中添加

    #!/bin/bash
    
    #ifconfig eth0 up														#可选,唤起你的网卡
    #dhclient	&																#可选,自带从dhcp获取ip地址
    
    startx&
    exit 0
    

    这样,在linux启动后,会执行/etc/rc.local下的命令,即 startx

    startx最终会调用/etc/X11/xinit/xinitrc下的命令

    我们在X的配置文件(这里我用的是startx默认最终会选择的/etc/X11/xinit/xinitrc)修改如下

    #!/bin/sh
    # /etc/X11/xinit/xinitrc
    #
    # global xinitrc file, used by all X sessions started by xinit (startx)
    # invoke global X session script
    
    echo "LEE:xset turen off screensave DPMS"
    xset s off																#关闭 X Screen Save
    xset dpms 0 0 0														#关闭 DPMS
    xset -dpms
              
    xhost +  																	#允许任意host连接到x服务
              
    export DISPLAY=:0.0 & /home/sements/developarea/qeyes/qeyes/qeyesArm64 &															#DISPLAY变量 并 #后台执行自己的一个小程序
            
    #. /etc/X11/Xsession
    openbox-session									#唤起 openbox
    

    在Linux/Unix类操作系统上, DISPLAY用来设置将图形显示到何处. 直接登陆图形界面或者登陆命令行界面后使用startx启动图形, DISPLAY环境变量将自动设置为:0:0, 此时可以打开终端, 输出图形程序的名称(比如xclock)来启动程序, 图形将显示在本地窗口上

    这里 xinitrc 中部分代码解释可以看这里: https://blog.csdn.net/sements/article/details/88123894

    2 - 指定X系统所使用的framebuffer设备

    为了让 X 界面系统启动时使用设定的framebuffer进行绘制,我们需要在相应配置文件中加入下面的语句:

    Section "Device"  
      Identifier "myfb"
      Driver "fbdev"
      Option "fbdev" "/dev/fb0"
    EndSection
    

    有两种可选的加入位置。

    • 第一种在目录(/etc/X11/xorg.conf.d 没有这个目录就创建即可)下已有的 配置文件(如:40-libinput.conf )中加入上面的语句。

    • (推荐)第二种就是在目录(/etc/X11/xorg.conf.d 没有这个目录就创建即可)新建一个 .conf 文件,这里叫它 99-fbdev.conf (前面的数字影响着 X 界面系统启动加载这些配置文件时的顺序),然后在这个文件中加入上面的语句。

    3 - 挂载U盘

    插入u盘,使用 fdisk -l 查看当前给u盘分配的盘号

    在这里插入图片描述

    创建一个文件夹用于接收挂载,这里是 sandisk16,然后使用mount命令挂载u盘上的分区

    # mount /dev/sda1 sandisk16/
    

    在这里插入图片描述
    即可在 sandisk16 文件夹下看到挂载的u盘分区1内的内容了

    4 - 在嵌入式系统上直接编译qt程序

    既然前面在根文件系统里面安装好了qt5-default以及编译器,我们便可以考虑在该根文件系统中直接进行qt程序的编译。
    既可以在主机上使用qemu进行虚拟化后挂载该文件系统进行编译,也可以在嵌入式系统上挂载该根文件系统,然后进行编译。

    要求事先在根文件系统里安装了 qt5-default

    安装编译器

    $sudo apt install gcc g++
    

    安装完毕后记得查看编译器的目标平台,我这里因为是 aarch64 架构的系统,所以gcc和g++自动匹配的是aarch64的编译器

    值得注意的是,如果直接用qmake来产生Makefile的话,其默认写入Makefile的是使用 “gcc” 进行编译。这里若你的 “gcc” 命令指向的并非你期望的编译器,可能会造成后面make时编译失败。
    解决这个问题可以通过下面在pro文件中添加指令来指定使用什么编译器,这样qmake后产生的Makefile中会修改使用你指定的编译器来进行编译。
    有意思的是,在aarch64平台下,有一个 aarch64_linux_gnu_qmake 可执行脚本(应该是叫这个,不记得了),可以使用该命令来替换qmake指令使用。感兴趣的可以看看该脚本内容。同样也是指定使用特定编译器的方式来生成Makefile

    在这里插入图片描述

    还可以在 pro 文件中添加下面指令来指定使用什么编译器进行编译,例如这里指定使用 arm-linux-gnueabihf

    QMAKE_CC=arm-linux-gnueabihf-gcc
    QMAKE_CXX=arm-linux-gnueabihf-g++
    QMAKE_LINK=arm-linux-gnueabihf-gcc
    QMAKE_AR=arm-linux-gnueabihf-ar
    QMAKE_STRIP=arm-linux-gnueabihf-strip
    

    运行qmake来产生Makefile,然后make执行Makefile

    $qmake
    $make
    

    执行程序

    ./你的程序
    

    展开全文
  • initramfs文件系统格式操作 ...1、制作好的initramfs根文件系统打包 find .|cpio -o -H newc|gzip -9 > ~/initramfs.img.gz 2、initramfs.img.gz根文件系统解包 解压gz: gunzip initramfs.img.gz 生成 ini...

     

       initramfs文件系统格式操作

    initramsf根文件系统为.cpio格式,并压缩为.gz格式

    1、制作好的initramfs根文件系统打包
    find .|cpio -o -H newc|gzip -9 > ~/initramfs.img.gz

    2、initramfs.img.gz根文件系统解包
    解压gz:
    gunzip initramfs.img.gz
    生成   initramfs.img

    解压cpio:
    mkdir initramfs
    cd initramfs
    cpio -idmv <initramfs.img

     

    展开全文
  • 之前编译整个工程的时候,makefile在最后会将根文件系统打包起来,然后把打包前的文件夹删除,这里我们再将它解压出来。 执行:tar -xvf rootfs_uclibc.tgz,解压完后,就可以对根文件系统添加我们需要的文件了。...
    1、首先将/osdrv/pub目录下的rootfs_uclibc.tgz解压到当前目录下。之前编译整个工程的时候,makefile在最后会将根文件系统打包起来,然后把打包前的文件夹删除,这里我们再将它解压出来。
    执行:tar -xvf rootfs_uclibc.tgz,解压完后,就可以对根文件系统添加我们需要的文件了。

    2、首先先让根文件系统能够自己挂载上nfs文件系统,这样我们就能将sample程序放到nfs文件系统中,方便我们的测试。
    修改根文件系统etc目录下的profile文件,在后面追加以下命令。
    ifconfig eth0 192.168.1.10
    先进入到/ko文件夹中执行:./load3518e -i -sensor ar0130 -osmem 32 -total 64来部署ko文件
    然后查看我们挂载的nfs文件的路径在哪,使用sudo showmount -e查看

    之后追加挂在nfs服务器的命令:mount -t nfs -o nolock 192.168.1.141:/home/aston/rootfs /mnt


    3、将我们需要用到的ko文件和lib文件拷贝进根文件系统中,而这些文件就是我们之前提及的mpp海思预先为开发者编译好的视频编解码的驱动。
    首先将mmp文件下的ko文件夹拷贝到根文件系统的根目录下。

    然后再将mmp文件夹下的lib文件夹内所有内容拷贝到根文件系统中的usr/lib中。

    其中lib文件夹里面的所有.a文件可以删除,因为这些都是静态库文件,用不到,可以删除。
    最后我们还需要将之前拷贝进来的文件都加上777的权限,这样以防出错。使用sudo chmod -R 777 到整个根文件系统目录下即可。

    4、添加完需要用的文件之后,就需要手工打包根文件系统了。
    在osdrv的上级目录下执行osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc -l -e 0x10000 -o osdrv/pub/rootfs_uclibc_64k.jffs2

    就可制作出了烧录用的根文件系统的镜像文件,生成的文件在osdrv/pub目录中,大小7.1M,比之前设定的根文件系统分区来的小,所以可以正常烧录。

    5、烧录跟文件系统。
    首先将编译好的根文件镜像放到tftp服务器的文件夹下,然后使用tftp命令下载到内存中去,然后再烧录到flash中。

    tftp更新并重新烧写rootfs的命令序列:
    mw.b 0x82000000 ff 0xc00000
    tftp 0x82000000 rootfs_uclibc_64k.jffs2
    sf probe 0
    sf erase 0x400000 0xc00000
    sf write 0x82000000 0x400000 0xc00000

    6、开始部署samplc程序
    sample程序在osdrv同级目录下的mmp文件夹中

    首先先看一下Makefile.param,发现里面的两个需要修改的地方。
    1、默认选中的事HI3516C,所以我们屏蔽掉默认的,打开我们的HI3518E_V200
    2、镜头默认选中的是SONY的镜头,同样,我们屏蔽默认的,打开我们的镜头AR130
    之后就没有什么需要改动的了。

    接下来就是进入到/mpp/sample/venc目录下,然后执行make指令,然后会生成一个app程序

    这个程序的功能就是录像,然后将录像的文件以h264形式保存在app所在的目录下。
    之后在串口终端中,输入./sample_venc 0按照指示就可以进行录像了,然后按两次回车就可以退出程序了。

    退出后会在在samle_venc目录下,也就是我们挂载的nfs文件夹下生成三个h264文件,使用vlc就可以对它们进行播放了。

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,276
精华内容 36,510
关键字:

根文件系统打包