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

建工教育网校官方网站企业网站建站 广州 视频

建工教育网校官方网站,企业网站建站 广州 视频,答题网站怎么做,财经大学网站建设1.为什么移植 疑惑 起初我也认为#xff0c;像libbpf-bootstrap这样在ebpf程序开发中很常用的框架#xff0c;理应支持不同架构的交叉编译。尤其是向内核态的ebpf程序本身就是直接通过clang的-target btf直接生成字节码#xff0c;各个内核上的ebpf虚拟机大同小异#xf…1.为什么移植 疑惑 起初我也认为像libbpf-bootstrap这样在ebpf程序开发中很常用的框架理应支持不同架构的交叉编译。尤其是向内核态的ebpf程序本身就是直接通过clang的-target btf直接生成字节码各个内核上的ebpf虚拟机大同小异对于字节码大概率是兼容的。那么问题就落在用户态程序生成上面。 加载器 由于libbpf-bootstrap框架使用bpftools将xxx.bpf.c生成为xxx.skel.h再注入到用户态xx.c程序当中因此用户态程序本身就是字节码的加载器。基于安卓的ebpf开发也有不少前辈探索过如下图 图源eBPF on Android之stackplz从0到1 - SeeFlowerX ps:强推他的安卓package用户态程序堆栈追踪工具我的不少灵感也来自于他的开发过程在此谢过SeeFlowerX前辈了。 最终他选择的解决方案是golang的ebpf生态交叉编译相当方便。但我面临的是性能的需要我还是打算折腾一下纯C的开发生态但是AOSP又实在太过庞大且面临API变动会使我们很头疼。 2.使用方法 准备 Android NDKgcc-aarch64-linux-gnuAndroid phone with root and unlock BL 安装依赖 git clone https://github.com/JiaHuann/libbpf-bootstrap-android cd libbpf-bootstrap-android sudo apt install gcc-aarch64-linux-gnu llvm clang wget https://dl.google.com/android/repository/android-ndk-r25c-linux.zip?hlzh-cn android-ndk-r25c-linux.zip unzip android-ndk-r25c-linux 设置环境变量 vim ~/.bashrc export your android-ndk-r25c/toolchains/llvm/prebuilt/linux-x86_64/bin to PATH 编译和推送 cd examples/c makeadb devices adb remount # may fail, you can leave with issure. adb push examples/c/btf_file/* example/c/your_executable_file /data/local/tmp adb shell #into android kernel shell 安卓shell操作 cd /data/local/tmp chmod x your_excutable_file ./run Congratulations! 运行效果如下 资料直通车Linux内核源码技术学习路线视频教程内核源码 学习直通车Linux内核源码内存调优文件系统进程管理设备驱动/网络协议栈 3.针对安卓的特性 libelf,libz on aarch64 embedded.x86 - android13(aarch64) cross-compile you can directly write ebpf both kernel-program and user-program on x86 machine.FlameGraph embedded to monitor performance.For None BTF/vmlinux android-kernel(CONFIG_DEBUG_INFO_BTF not set) support.adb debug (after compilinglinking, directly push into android-phone) embedded. 4.移植过程 寻找方案 于是我继续折腾libbpf-bootstrap的交叉编译好巧不巧在How to cross-compile programs from amd64 to arm64 · Issue #144 · libbpf/libbpf-bootstrap · GitHub这个issure中也发现了这个问题显然直到现在还是open状态给出的maintainer给出的方案是 Yes, libbpf depends on libelf and libz, so you need declare where the libraries and header files can be found. such as,  make EXTRA_CFLAGS-IXXX EXTRA_LDFLAGS-LXXX ARCHarm64. You can get a copy of these libraries from here for quickly verification if you dont want to cross-compile them yourself. 我寻思着也可行但是几经折腾后我发现了很多问题 Android NDK在r17已经宣称不支持gcc在r18已经删掉最新版的r25只有clang在使用NDK交叉编译时会遇到一堆莫名其妙的问题。我的开发机并没有打开CONFIG_DEBUG_BTF_INFO但是为了方便我想引入外部BTF file但是有些目录在android kernel并不可写。 解决 最终我在本地几经尝试交叉编译出了libbpf依赖的libelf以及libz,很有趣的是在编译的过程中我使用aarch64-linux-gnu竟然编出来的依赖竟然可以用。在libbpf-bootstrap中想到用户态程序可能也没有太多编译上的新特性于是我继续使用aarch64-linux-gnu交叉编译果然还是可行。最终aarch64的可执行文件还是编译了出来。 为了优化大家的开发速度和不再折腾这个过程我将所有的细节依赖都合并了起来并且修改了libbpf源码加入了外部BTF文件路径且在repo中放入了一个a13-5.10的btf 文件我写定了路径为/data/local/tmp,push到这里就可以使用。关于这个btf版本问题我的内核是5.4但是目前使用起来尚未发现问题。GitHub - JiaHuann/libbpf-bootstrap-android: Do something to fit android aarch64 to develop ebpf programs using libbpf-bootstrap framework 至此可以ebpf程序源码可以无需任何改动就运行在安卓kernel当然有一些kernel版本决定的特性和api还是会限制的这个与是否交叉编译运行无关 PS:当初为了验证是否可行全是草率的静态链接的生成的可执行文件可能会有点大后续即将马上修改为动态链接。 当然如果有条件还是使用arm虚拟机或者qemu开发吧交叉编译确实不好折腾: (当我还在折腾的时候我同学的mac已经能run了 原文作者Linux内核之旅
http://www.sczhlp.com/news/221432/

相关文章:

  • 济源建设网站的公司芜湖县建设局网站
  • 西安网站建设推广服务婚纱摄影网站首页
  • 电商网站欣赏简述电子商务网站的建设步骤
  • 怎么做网站站长游戏推广公司
  • 微课网站开发杭州百度人工优化
  • 信用网站建设工作简报动漫设计制作专业学什么
  • ae模板素材网站仿新浪全站网站源码
  • 做游戏都需要什么网站吗小学四年级摘抄新闻
  • 广东石油化工建设集团公司网站电子商务网站的数据库怎么做
  • 甘肃省建设厅招标办网站为企业做优做强
  • 成都营销型网站设计创建网站的六个步骤
  • 网上如何建网站建立网站的几个步骤
  • 网站底部放什么岳阳网站定制开发设计
  • 58同城网站建设推广推广计划书怎么写
  • 网站怎么加内容网站引导页html模板
  • 网站建立的流程校园二手网站设计论文
  • 甘肃省住房城乡建设厅网站首页学电子商务后悔死了
  • 网站优化时间廊坊网站建设佛山厂商
  • 网站权重一般有几个等级如何建设内部网站
  • 自己做网站iis设置建设三合一网站
  • wap医院网站模板 for dedecms v1.0百度 如何 关键字 网站域名 关联
  • 原平的旅游网站怎么做的专业的网站制作设计
  • 网站开发算软件开发吗市场营销活动策划方案
  • 如何在公司网站上添加内容wordpress 网站备案号
  • 江苏网站设计公司电话网站建设对我有什么好处
  • 软件实施流程八个阶段惠州seo网络推广
  • 网站如何做微信支付宝支付宝支付桂林两江四湖夜游时间
  • 网站开发工程师证唐山建站方案
  • 网站开发项目实例网站经营与建设
  • 网站开发 需求说明书深圳工程建设网站