范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

在UbuntuX8664中构建armubunturootfs和调试arm应用

  我们常用的是使用 buildroot、busybox、yocto 进行构建arm嵌入式根文件系统,这种方式大家接触得应该都比较多了,构建也是比较简单,唯一得缺点是源得速度太慢了,有时候需要一天才能编译出来一个文件系统。 1. 下载ubuntu base包
  我今天讲得是一个更简单得方法,从ubuntu-base进行构建,以 ubuntu20.04 为例,下载arm架构的ubuntu-base压缩包https://cdimage.ubuntu.com/ubuntu-base/releases/,可以看到有几类以后缀 -armXX.tar.gz  结尾的,它们的含义如下: ubuntu-base-20.04.3-base–arm64.tar.gz  适用于64位arm架构,几乎所有ARMv8-A都是64位处理器,例如ARM Cortex-A53、 ARM Cortex-A57、ARM Cortex-A72、ARM Cortex-A73、RM_Cortex-A76等。 ubuntu-base-20.04.3-base-armhf.tar.gz  适用于32位带硬浮点arm处理器,hf(hard float),即带有浮点单元 (FPU),主要用于ARMv7-A,例如[ARM Cortex-A5、ARM Cortex-A7、ARM Cortex-A8、ARM Cortex-A9、ARM Cortex-A12、ARM Cortex-A15、ARM Cortex-A17。
  压缩包25M左右,解压出来大概50多M,还是比较精简的,如果这个大小不能接受,就只能自己使用buildroot构建,经常用它来构建一个 ramdisk . QSPIFlash就完全可以装下一个文件系统。
  使用ubuntu-base的好处是,可以直接使用apt来安装你所需要的软件包,不需要一个一个的编译各种依赖环境。我们下载后解压可以看到,很多命令是没有的,基本的 ifconfig  , vim  , file  等命令都没有,当然实际运行环境是不需要这些软件包的。
  如果你的嵌入式环境中没有网络,则我们可以直接在PC的Ubuntu中将需要的包通过apt安装好,再打包烧写到arm中。
  下面讲一下具体方法: 2. 将ubuntu-base解压
  将ubuntu-base包解压到准备的rootfs文件夹,这里为/mnt/ubuntu,下面命令根据实际情况更换 $sudo tar -xpvf ubuntu-base-20.04.3-base-armhf.tar.gz -C /mnt/ubuntu3. 安装qemu arm模拟器环境,可以直接在x86_64中运行和调试应用
  通过apt安装qemu sudo apt-get install multistrap qemu qemu-user-static binfmt-support dpkg-cross
  查看qemu版本 qemu-arm-static --version qemu-arm version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.37)
  Ubuntu自带的 QEMU 版本有点老(我的18.04 LTS 附带的 QEMU 2.11),如果需要新版本则需要自己编译安装,当前最新版本是 QEMU 6.1.0 ; wget https://download.qemu.org/qemu-6.1.0.tar.xz tar xvJf qemu-6.1.0.tar.xz mkdir build cd build ../qemu-6.1.0/configure --static --prefix="$PWD/user_static" --target-list=arm-softmmu --disable-system
  --disable-system  不编译 qemu-system-xx  相关的程序,这里暂时不需要.
  其中 --target-list  后面可以接不同的架构的qemu,比如 arm-softmmu  是针对arm平台的。 aarch64-softmmu  是针对arm64平台,也就是aarch64. 4. 安装binfmt
  binfmt(Binary Format)是一个内核模块,它的用处如它的名字,通过二进制文件头来识别它的格式,从而指定用哪个解释器去启动——可以理解为二进制文件的hashbang(用处类似于在Python文件的第一行写上" #!/usr/bin/env python  ")。有了它我们就可以像启动原生ELF一样启动一个ARM或其他任何QEMU支持的程序了。 sudo apt install qemu-user-binfmt update-binfmts --display
  安装这个包会依赖安装系统软件源中的qemu-user。我们用不到它,但装这个包的意义在于它包含了几个自动向内核注册QEMU binfmt的脚本,这样我们就不需要再手动指定我们的ARM可执行文件需要哪个路径下的QEMU来执行,非常方便。安装成功后在命令行中执行" update-binfmts –display  "。
  我们此时可以测试一下,临时将环境变量 QEMU_LD_PREFIX  设置为我们要chroot进去的根目录,然后运行ARM设备中提取出的ELF可执行文件,如果不报错就可以了。如下a.out是我编译的arm的hello world,这个程序可在我的测试设备上正常运行。 5. 如何在x86_64中调试arm程序?不用在开发板中调试
  编辑hello.c测试程序 #include  int main() {     printf("hello world!r ");     return 0; }
  交叉编译arm程序 $ arm-linux-gnueabihf-gcc hello.c -o a.out $ file a.out              a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=222b024ba166e297b1ceb1dc97a906259712bb60, with debug_info, not stripped
  使用qemu在x86下运行arm程序 $ export QEMU_LD_PREFIX=/mnt/ubuntu $ ./a.out  hello world!
  不加 QEMU_LD_PREFIX  环境变量,则会出现找不到库的错误提示 /lib/ld-linux-armhf.so.3: No such file or directory  .
  /mnt/ubuntu  是ubuntu base包的解压路径,也就是arm rootfs的根目录.
  在这里每次都需要设置 QEMU_LD_PREFIX  环境变量.我们是否可以模拟arm的文件系统环境?直接运行程序呢? 答案是肯定的.这也是我们在x86环境中构建根文件系统的原因.
  复制QEMU程序
  拷贝 qemu-arm-static  或者我们自己编译的最新版本到刚刚解压出来的目录 /mnt/ubuntu/usr/bin/  : $sudo cp /usr/bin/qemu-arm-static /mnt/ubuntu/usr/bin
  若是 arm64  则拷贝 qemu-aarch64-static  : $sudo cp /usr/bin/qemu-aarch64-static /mnt/ubuntu/usr/bin
  当我们启动为ARM或其他架构编译的应用程序时,系统会调用 binfmts  识别它的类型并调用之前注册的interpreter(如 /usr/bin/qemu-aarch64  )来"翻译"启动。在chroot下,依然会从这个路径中寻找。因此如果使用 chroot  后[6 小点讲解],这个路径下找不到QEMU,启动任何程序都会报错 No such file or directory  。这个报错会有很多歧义,因此一定要自己确认一下QEMU确实在rootfs的" /usr/bin  "目录中。
  以后拿到一个新的固件包,只需要解压到一个文件夹里,把对应架构的qemu拷贝进去,直接运行命令chroot即可。遇到需要调试的程序,我们通过运行 qemu-arm -g 2331 /path/to/binary  指定 -g  参数开启调试选项,也可以声明一个环境变量 QEMU_GDB=2331  ,带上这个环境变量所启动的程序,都会自动开启GDB端口并等待调试器attach,调试起来是不是很方便呢? 6. chroot操作
  方法1:使用原始的方法,来进入chroot环境
  挂载和激活 /dev:通常激活 /dev 目录下设备的方式是在 /dev 目录挂载一个虚拟文件系统(比如 tmpfs),然后允许在检测 到设备或打开设备时在这个虚拟文件系统里动态创建设备节点。这个通常是在启动过程中由 udev 完成。由于我们的ubuntu-base新系统还没有 udev,也没有被引导,有必要手动挂载和激活 /dev 这可以通过绑定挂载宿主机系统的/dev 目录来实现。绑定挂载是一种特殊的挂载模式,它允许在另外的位置创建某个目录或挂载点的镜像。运行下面的命令来实现: sudo mount -v --bind /dev /mnt/ubuntu/dev
  挂载虚拟文件系统: sudo mount -vt devpts devpts /mnt/ubuntu/dev/pts -o gid=5,mode=620 sudo mount -vt proc proc /mnt/ubuntu/proc sudo mount -vt sysfs sysfs /mnt/ubuntu/sys sudo mount -vt tmpfs tmpfs /mnt/ubuntu/run sudo cp /etc/resolve.conf /mnt/ubuntu/etc/
  进入chroot环境: chroot /mnt/ubuntu
  我们可以编写一个bash脚本ch-mount.sh来完成挂载和后面的卸载操作
  sudo bash ch-mount.sh -m ubuntu-rootfs/
  ch-mount.sh 的内容 #!/bin/bash function 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} } function 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 bothparameters were missing"     echo ""     echo "1"st parameter can be one ofthese: -m(mount) OR -u(umount)"     echo "2"nd parameter is the full pathof rootfs directory(with trailing "/")"     echo ""     echo "For example: ch-mount -m/media/sdcard/"     echo ""     echo 1st parameter : ${1}     echo 2nd parameter : ${2} fi
  卸载使用 sudo bash ch-mount.sh -u ubuntu-rootfs/
  方法2:使用arch-chroot
  linux发行版archlinux提供了一个自动化chroot的脚本arch-chroot,包含自动配置DNS文件、自动挂载虚拟文件系统等操作,用来维护linux系统非常方便,chroot时无需挂载等操作直接执行: sudo arch-chroot /mnt/ubuntu
  arch-chroot  是方法1的封装,除此之外有会对目标系统进行检测并预先配置.
  经过上述步骤我们就进入chroot环境了.
  更新源并安装需要的软件
  修改 /mnt/ubuntu/etc/apt/sources.list  ,修改之前做一个备份.
  这里推荐使用中科大的源http://mirrors.ustc.edu.cn/ubuntu-ports/ # 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal main restricted universe multiverse # deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse # deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-updates main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse # deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-backports main restricted universe multiverse deb https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse # deb-src https://mirrors.ustc.edu.cn/ubuntu-ports/ focal-security main restricted universe multiverse
  首先更新资源列表,然后安装必备的软件包,根据自己的需求:
  # sudo sudo命令 # ssh ssh的client和server # vim vim编辑器 # net-tools ifconfig,netstat,route,arp等 # ethtool ethtool命令,显示、修改以太网设置 # wireless-tools iwconfig等,显示、修改无线设置 # ifupdown ifup,ifdown等工具 # network-manager Network Manager服务和框架,高级网络管理 # iputils-ping ping和ping6 # rsyslog 系统log服务 # bash-completion bash命令行补全 # htop htop工具,交互式进程查看器 apt-get install   sudo    ssh    vim    net-tools    ethtool    wireless-tools    ifupdown    network-manager    iputils-ping    rsyslog    bash-completion    htop    --no-install-recommends
  也可通过chroot直接执行某个命令,例如修改root密码,其中/mnt/ubuntu是我们的rootfs目录: sudo chroot  /mnt/ubuntu  passwd
  配置串口调试服务
  制作的rootfs里,可能是不包含有串口登陆tty的,需要添加一个 /etc/init/ttyPS0.conf  文件才能从串口登陆。否则你会在串口看见KERNL的输出信息,但就是等不到登陆提示。
  ttyPS0.conf  ,修改其内容如下: echo "start on stopped rc or RUNLEVEL=[12345]" > /etc/init/ttyPS0.conf echo "stop on runlevel [!12345]" >> /etc/init/ttyPS0.conf echo "respawn" >> /etc/init/ttyPS0.conf echo "exec /sbin/getty -L 115200 ttyPS0 vt102" >> /etc/init/ttyPS0.conf
  准备打包前,清除文件系统中的一些缓存数据 sudo apt-get clean sudo rm -rf var/cache/* sudo rm -rf var/lib/apt/lists/*7. 退出构建Core根文件系统
  设置好Core根文件系统后,用exit命令退出chroot。 8. 打包做好的Core根文件系统
  sudo tar –czvf ../ubuntu.tar.gz .
  在根文件系统上一目录生成 ubuntu.tar.gz 的文档.

没有专利的小米却截胡华为了,小米MIXFOLD全球首发液态镜头手机提起液态镜头,大家或许都记得早在2018年的时候就爆出华为申请了一种透镜系统级镜头液体镜头变焦成像技术专利,并且在2019年的4月份和12月份又申请了两项关于液态镜头的专利。就在大华为跑步进场,鸿蒙发布时间确定,幸福来得太突然华为近几年的发展并非一帆风顺,尤其是2019年5月之后,华为遭受了不平等的对待,海外业务受阻,谷歌甚至要取消对华为的安卓系统授权,这对华为将造成巨大的影响,大家正为此事担心的时候,分享几款好用的微信小程序,看看有没有你喜欢的1。中石化一键加油中石化一键加油是中国石化运用互联网推出的加油方式,为了推广这个快捷的加油支付方法,也相应给出了加油优惠的政策。结合今年疫情的情况,一键加油是很有必要的,不用下车直入手Mate40pro后的一点真实感受华为Mate40pro自上市以来,一直坚持了整整半年才在官方商城抢购成功,经过大半年的等待,最初的那份热情也减退了不少,除了因为价格定得高,还因为专注拍照的P50也临近发布,期待在小马哥终于出手!SpringBoot综合能力全面升级!自从SpringBoot问世以来,就受到了广大开发人员的极大关注,相关的学习资料也很多,但很多读者在掌握SpringBoot的基本用法之后,在遇到实际项目的时候,很多核心问题却难倒74岁宗庆后再创业,娃哈哈成立AI公司世界浙商网4月1日讯(浙商全媒体记者陈抗)在智能制造上布局已久的娃哈哈,现在将眼光投向了人工智能领域。天眼查数据显示,3月27日,娃哈哈新成立了一家人工智能机器人公司浙江娃哈哈智能马化腾体验华为MateX5G全频段长续航都备好了手机中国新闻在日前举行的中国IT领袖峰会中,华为消费者业务CEO余承东向腾讯董事局主席马化腾展示了华为MateX折叠屏手机。马老板一上来就问了一个非常专业的问题华为计划中的5G手机沈南鹏首次问鼎!全球风险投资家TOP100榜单公布CBInsights联合纽约时报连续第四年发布了全球风险投资家Top100榜单,2019年,红杉资本中国基金创始及执行合伙人沈南鹏从去年的第11名一跃成为第1名。自2016年榜单首今天是4月1日国外愚人节,苹果给了大家一个很意外的惊喜!苹果降价iPhone最高降500元,用户可退差价4月1日,苹果中国调整了旗下产品的售价,而调整的原因是,从今天开始新政开始执行,制造业增值税将由此前的16降至13。目前,苹果中国官2888元买个情怀!Palm小屏新机搭载骁龙435,买的人还真不少说到Palm(奔迈)这个手机品牌,可能除了极少数发烧友外,在国内绝大多数手机用户都从没听过。在过去手机普遍采用塞班系统时代,奔迈就属于极度冷门的非主流手机,可以说是比黑莓还要更加冷虽然是教科书级别的内部新Macmini仍有缺憾近年来有不少人都期盼苹果更新一款产品,那就是Macmini,这款产品有别于大部分苹果电脑,其是一款非常小巧的主机,插上屏幕鼠标键盘就可以使用,Macmini开创了迷你电脑的全新设计
8点1氪丨iPhone14有望实现息屏显示张朝阳回应搜狐员工遭遇诈骗国家医保局不得用医保支付大规模人群核酸检测费用上市进行时云从科技36氪获悉,人工智能企业云从科技公告,将于5月27日在上海证券交易所科创板上市,首次公开发行价每股15。37元,对应的发行人2021年摊薄后静态市销率为10。58别再黑单踏板模式不安全了!你会开特斯拉吗?如何正确踩刹车?又是特斯拉,又是刹车失灵,这都202年了,怎么还有人黑特斯拉刹不住车呢?剧本还越来越刺激,不但刹车失灵啊,两个踏板都失灵,踩着刹车,车自己加速到170,干得漂亮。姐姐别误会,我可没小米12S真机图曝光,有徕卡标识今天网络上流传了一张疑似小米12S的真机图,从照片中可以看出,小米12S延续了12系列的外观语言,机身背面依旧是矩阵模组分割线的设计,不同的是模组右下角新增了徕卡标识,不过并不是这小米向AOSP提交代码禁止通过shell直接导出APK出品开源中国文局长小米工程师在向AOSP(AndroidOpenSourceProject)提交的一个commit中指出,应禁止通过shell获取已安装的APK,理由是某些APK可4月国内智能机销量同比下滑21。6苹果荣耀OPPO小米vivo前五IT之家5月25日消息,昨日晚间,CINNOResearch发布报告称,2022年4月国内市场智能手机销量为1760万部,较去年同期下滑21。6,环比下滑12。2,单月的销量创下2一年后入手小米11Pro,体验下来觉得这款手机还值得入手小米11Pro曾是首款搭载骁龙888移动平台的手机,也是2021年的旗舰热潮的开山之作,虽然已经过去了一年多,这款机器相对于时下的旗舰机来说依然能打。尤其是50倍潜望式变焦10倍混明天公布结果!北京5个家庭抢1个新能源车指标,现在申请个人指标排队20年起每经记者董天意每经编辑孙磊作为全国最具代表性的限购城市之一,北京市的历次车牌摇号结果都牵动着数十万人的心。5月25日,每日经济新闻记者从北京市小客车指标调控管理信息系统官网获悉,2标签画像体系建设方法论编辑导语标签体系对于企业进行数字化营销十分重要,本篇文章作者分享了标签画像体系建设的方法论,总结出三目标和五步法的标签画像体系建设方法论,能够有效提升企业整体运营效率,一起来学习一5G智能网关可以用在哪些行业5G智能网关,是工业级物联网应用的核心,而工业物联网在不同的产业中又有具体的细分应用。当5G融合智能网关后能实现什么功能?又具体应用哪些行业?本篇就来为大家简单介绍市面上常见5G网IPO观察珠城科技二轮问询后招股书数据大变脸研发费用率行业垫底缴纳社保不合规近日,浙江珠城科技股份有限公司(以下简称珠城科技)披露招股书上会稿,并将于5月26日首发上会。尽管报告期内珠城科技业绩稳步增长,但其研发投入并未随着营收的增长而增加。此外,珠城科技新零售就是新方法做老生意(一)我是一个创业者,前几年因病退出工作,近来康复还算顺利,准备再次出山,做点啥呢?我选了新零售这个方向,因为零售是个大市场,但消费者购买逻辑正在发生变化,迫使各行各业必须拥抱新零售。启