openharmony(rk3568)移植ethtool

我们已经完成了openharmony(ohos_lite)移植ethtool,参考

openharmony(ohos_lite)移植ethtool

接下来我们只需要在这个基础上改造适配 rk3568即可。

1、产品引用:把子系统及其组件加入产品定义中,rk3568产品定义文件为

vendor/hihope/rk3568/config.json 添加 ethtool

2、修改libmnl 的BUILD.gn 文件

cpp 复制代码
config("common_config") {
  cflags = [
    "-Wall","-Wextra","-Werror","-g","-O2","-DHAVE_CONFIG_H","-fvisibility=hidden", "-Wno-unused-parameter"
  ]
  cflags_c = []
  ldflags=[]
  libs = [] # 定义链接库
}

common_include_dirs=
[
".",
"include/."
]


libmnl_SRC =  [
"src/attr.c","src/callback.c","src/nlmsg.c","src/socket.c"
]

if (defined(ohos_lite))
{
  # 定义可执行文件目标
  shared_library("libmnl_shared") {
    sources = libmnl_SRC  # 根据实际情况替换为正确的源文件路径
    include_dirs = common_include_dirs
    
    configs = []
    configs += [ ":common_config" ]
  }
}
else
{
  import("//build/ohos.gni")  # 导入编译模板

  # 定义可执行文件目标
  ohos_shared_library("libmnl_shared"){
    sources = libmnl_SRC  # 根据实际情况替换为正确的源文件路径
    include_dirs = common_include_dirs
    configs = [ ":common_config" ]
    
    part_name = "libmnl"
    install_enable = true  # 是否默认安装(缺省默认不安装),可选
    install_images = [ "system" ]   
    subsystem_name = "thirdparty"
  }
}

3、修改ethtool 的BUILD.gn文件

cpp 复制代码
#import("//build/lite/config/component/lite_component.gni")  # 导入编译模板

config("common_config") {
  cflags = [
    "-Wall","-Wextra","-D_POSIX_C_SOURCE=200809L","-g","-O2","-DHAVE_CONFIG_H","-Werror"
  ]
  cflags_c = []
  ldflags=[]
  libs = [] # 定义链接库
}

common_include_dirs=
[
".",
"//third_party/ethtool/uapi",
"//third_party/libmnl/include"
]

ethtool_SRC = ["ethtool.c", "rxclass.c", "common.c", "json_writer.c", "json_print.c", "amd8111e.c", "de2104x.c", "dsa.c", "e100.c", "e1000.c", "et131x.c", "igb.c", "fec.c", "fec_8xx.c", "fsl_enetc.c", "ibm_emac.c", "ixgb.c", "ixgbe.c", "natsemi.c", "pcnet32.c", "realtek.c", "tg3.c", "marvell.c", "vioc.c", "smsc911x.c", "at76c50x-usb.c", "sfc.c", "stmmac.c", "sff-common.c", "module-common.c", "sfpid.c", "sfpdiag.c", "ixgbevf.c", "tse.c", "vmxnet3.c", "qsfp.c", "fjes.c", "lan78xx.c", "igc.c", "cmis.c", "bnxt.c", "cpsw.c", "lan743x.c", "hns3.c"]

netlink_SRC = ["netlink/netlink.c", "netlink/msgbuff.c", "netlink/nlsock.c", "netlink/strset.c", "netlink/monitor.c", "netlink/bitset.c", "netlink/settings.c", "netlink/parser.c", "netlink/permaddr.c", "netlink/prettymsg.c", "netlink/features.c", "netlink/privflags.c", "netlink/rings.c", "netlink/channels.c", "netlink/coalesce.c", "netlink/pause.c", "netlink/eee.c", "netlink/tsinfo.c", "netlink/fec.c", "netlink/stats.c", "netlink/mm.c", "netlink/desc-ethtool.c", "netlink/desc-genlctrl.c", "netlink/module-eeprom.c", "netlink/module.c", "netlink/rss.c", "netlink/desc-rtnl.c", "netlink/cable_test.c", "netlink/tunnels.c", "netlink/plca.c", "netlink/pse-pd.c", "netlink/phy.c", "netlink/tsconfig.c"]

ethtool_SRC += netlink_SRC

common_deps = ["//third_party/libmnl:libmnl_shared"] #通过分析Makefile补充

if (defined(ohos_lite))
{
  # 定义可执行文件目标
  executable("ethtool") {
    sources = ethtool_SRC  # 根据实际情况替换为正确的源文件路径
    include_dirs = common_include_dirs
    deps = common_deps
    configs = []
    configs += [ ":common_config" ]
  }
}
else
{
  import("//build/ohos.gni")  # 导入编译模板

  # 定义可执行文件目标
  ohos_executable("ethtool") {
    sources = ethtool_SRC  # 根据实际情况替换为正确的源文件路径
    include_dirs = common_include_dirs
    deps = common_deps    
    configs = [ ":common_config" ]
        
    part_name = "ethtool"
    install_enable = true  # 是否默认安装(缺省默认不安装),可选
    install_images = [ "system" ]   
    subsystem_name = "thirdparty"

  }
}

4、编译 hb set 设置 standard --> rk3568

hb build --ccache -T ethtool

报错

解决方法

这里比较奇怪,不知道为什么会报这个错误

通过查看发现 libmnl/include/linux 下有个 socket.h ,在ethtool/uapi/linux 也有 个socket.h,这个头文件不知道是不是 跟 系统的头文件冲突了,我这里的解决方法是 删除这两个头文件

cpp 复制代码
mv ethtool/uapi/linux/socket.h  ethtool/uapi/linux/socket.h.in
mv libmnl/include/linux/socket.h libmnl/include/linux/socket.h.in

重新编译

报错

解决办法

编译选项中增加 "-Wno-gnu-variable-sized-type-not-at-end","-Wno-unused-but-set-variable"

重新编译

这里看到编译通过了。

到此 openharmony(rk3568)移植ethtool 完成了

相关推荐
星恒随风2 分钟前
Linux网络编程:彻底理解IO多路复用select!从fd_set位图、读写就绪到手写TCP多客户端字典服务器
linux·服务器·网络
陈布衣30 分钟前
MySQL(1)_MySQL 5.7.21 Linux 安装笔记
linux·笔记·mysql
Oiiouui2 小时前
linux服务器部署Logto后端与对应前端的实现
linux·服务器·前端·后端
ITKEY_3 小时前
用 Emacs Dired 实现 em:退出文件管理器后,让终端自动切换目录
linux·服务器·emacs
wt95273 小时前
VMware 虚拟机磁盘扩容实战文档(Ubuntu 22.04 + LVM)
linux·后端
就像楞次定律3 小时前
【Linux 学习记之二】C++ 构建体系与底层链接机制的深度透视(2)
linux·后端
无足鸟ICT3 小时前
【RHCA+】slabtop命令(查看slab缓存)
linux
且从容.3 小时前
Ubuntu 安装 Docker
linux·ubuntu·docker
青梅味猪大肠4 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
沫璃染墨5 小时前
从零入门计算机网络系列(十四):TCP报文与字节流本质——从数据封装到报文边界
linux·服务器·网络·网络协议·tcp/ip·tcp