当前位置: 首页 > wzjs >正文

做公司网站哪家 上海怎么在腾讯地图上添加自己的店铺

做公司网站哪家 上海,怎么在腾讯地图上添加自己的店铺,做网站优化时 链接名称"首页"有必要添加nofollow吗?,自己做的网站怎么放上网昨天尝试了一下x86版的ubuntu上使用qemu运行arm版ubuntu,使用起来感觉比较慢,毕竟是需要qemu模拟运行整个操作系统。 于是笔者想是否可以在x86版Ubuntu的容器中运行ARM版Ubuntu,经过查询资料,发现还真是完全可行的,它…

昨天尝试了一下x86版的ubuntu上使用qemu运行arm版ubuntu,使用起来感觉比较慢,毕竟是需要qemu模拟运行整个操作系统。

于是笔者想是否可以在x86版Ubuntu的容器中运行ARM版Ubuntu,经过查询资料,发现还真是完全可行的,它通过 binfmt_misc + QEMU 用户态模拟 技术实现,不得不赞叹Linux系统的强大

它的核心原理

  1. binfmt_misc (Binary Format Miscellaneous):
    这是 Linux 内核的一个功能,允许内核识别并处理特定格式(通过文件开头的“魔数”识别)的可执行文件。当内核遇到一个它本身不支持的架构(如 ARM)的可执行文件时,binfmt_misc 可以配置成调用一个指定的用户空间程序(这里是 QEMU)来执行它。
  2. QEMU User Emulation:
    QEMU 的 用户态模拟 模式允许它在一种 CPU 架构(宿主机的 x86)上运行为另一种 CPU 架构(容器的 ARM)编译的程序。它动态地将目标架构(ARM)的指令翻译成宿主机架构(x86)的指令来执行。这个过程不需要模拟整个操作系统内核,效率相对较高(虽然仍有性能损失)。

一、宿主环境准备

需要在宿主Ubuntu系统中安装qemu-user-staticbinfmt-support

sudo apt install qemu-user-static binfmt-support

二、拉取ARM版ubuntu容器镜像

$ docker pull --platform linux/arm64 ubuntu:24.04
24.04: Pulling from library/ubuntu
3eff7d219313: Pull complete 
Digest: sha256:a328b84b92f71a85f459722a1c73c0363f9f8e3f66bf74a204bb35c605cf670c
Status: Downloaded newer image for ubuntu:24.04
docker.io/library/ubuntu:24.04

三、创建容器

参见笔者之前的博文:搭建ubuntu容器内C/C++开发调试环境

$ sudo docker run -itd -p 2822:22 --privileged --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --cap-add=SYS_ADMIN --name ubuntua ubuntu:24.04 bash
WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64/v4) and no specific platform was requested
d56837424fa8ef161d7c463e50bdb0288340d7797348fbfd2a4acfdae50ccc87

创建容器比使用qemu安装ARM版Ubuntu快多了,创建好容器之后,使用下面的命令进入容器,并确认是否为ARM版,aarch64为ARM64,说明能正常运行。

$ $ docker exec -it ubuntua bash
root@d56837424fa8:/# uname -m
aarch64

后续参见笔者之前的博文:搭建ubuntu容器内C/C++开发调试环境,在容器中安装openssh-server,并让容器启动时自动运行openssh-server,以及安装编译器等等。

root@d56837424fa8:/# apt update
root@d56837424fa8:/# apt install gcc gdb cmake ninja-build openssh-server
root@d56837424fa8:/# mkdir /run/sshd
root@d56837424fa8:/# /usr/sbin/sshd&
root@d56837424fa8:/# adduser admin

注意:如果想要在容器中使用GDB进行调试程序,将会出现问题,导致无法调试

warning: Could not trace the inferior process.
warning: ptrace: Function not implemented
During startup program exited with code 127.

在这里插入图片描述

在这里插入图片描述

即使我们在创建容器时,添加了参数:

--privileged --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --cap-add=SYS_ADMIN

依旧无法使用GDB调试程序,原因是在x86系统中运行arm容器,是通过QEMU 的 用户态模拟 模式来运行的,目前QEMU 用户态模拟无法完全支持 ptrace 系统调用的跨架构调试,ptrace 需要与内核深度交互,而QEMU 用户态模拟无法正确传递所有 ptrace 系统调用,特别是涉及寄存器访问和内存操作等调试功能。

据说可以通过使用相同版本的gdb-multiarchgdbserver进行远程调试,笔者没有尝试是否行得通,读者可以自行尝试。其方法是在容器内使用:

gdbserver :1234 ./demo

进行监听,需要将容器内的1234端口映射到宿主机的某个端口,比如还是1234

然后将要调试的程序复制到宿主机中,在宿主机中使用相同版本的gdb-multiarch调试

gdb-multiarch -ex "set architecture aarch64" -ex "target remote 127.0.0.1:1234" -ex "file demo"

这种方法适用于命令行调试,不太适合VSCode这样的IDE,不太方便。

综上,容器中运行ARM系统最大的好处就是比模拟整个ARM系统快,缺点就是不能直接在容器中使用GDB进行调试。如果要进行ARM的C/C++开发,为了方便调试,还是使用前文x86版的ubuntu上使用qemu运行arm版ubuntu介绍的模拟整个系统吧。

如果对你有帮助,欢迎点赞收藏!

http://www.dtcms.com/wzjs/470331.html

相关文章:

  • 护理学院网站建设免费的自媒体一键发布平台
  • 教育机构招聘网站建设我要发布信息
  • iis配置网站周口网站seo
  • wordpress 建的网站吗google搜索中文入口
  • 永康公司做网站西安seo经理
  • 网站如何优化关键词排名百度推广代理加盟
  • net新闻网站开发西安seo代运营
  • 门户类网站是什么意思海外推广服务
  • wordpress网站没有阅读量嘉兴网站建设方案优化
  • 做效果图常用的网站乐山网站seo
  • 可以拿自己电脑做网站主机创建网站
  • 深圳做网站推广公司哪家好seo云优化是什么意思
  • wordpress credits.php推荐seo关键词优化
  • 宁波高端定制网站建设网址查询ip地址
  • 免费个人手机网站seo可以提升企业网站的
  • 宝安大型商城网站建设营业推广是什么意思
  • 如何获取网站是哪个公司制作网络营销课程设计
  • 余杭网站建设外贸建站教程
  • 织梦网站首页文字修改合肥新闻 今天 最新消息
  • 视频播放网站开发教程兰州seo整站优化服务商
  • 武汉教育网站制作公司南昌企业网站建设
  • 怎样通过网盘做电影网站网站制作流程是什么
  • 网站开发工作北京seo专员
  • 创意网名带有特殊符号山东济南seo整站优化费用
  • 应用商店官方下载北京seo排名优化网站
  • 企业做网站etp和源程序seo实战技术培训
  • 深圳网站建设jm3q长沙官网seo技术
  • 昆明哪个公司做网站建设最好广告设计公司
  • wordpress文章在哪广东seo推广哪里好
  • 福州网站建设嘉艺b站大全永不收费2023入口在哪