Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ImmortalWrt SDK 使用说明 #7

Open
1715173329 opened this issue Aug 5, 2023 · 0 comments
Open

ImmortalWrt SDK 使用说明 #7

1715173329 opened this issue Aug 5, 2023 · 0 comments

Comments

@1715173329
Copy link
Owner

1715173329 commented Aug 5, 2023

什么是 SDK

SDK 集成了完整构建系统以及预编译工具链,旨在为特定目标交叉编译软件包,而无需从头开始构建整个 ImmortalWrt。

SDK 可以做的事:

  • 编译第三方软件包,确保与当前系统标准库兼容
  • 编译某些软件包的新版本
  • 为某些软件包添加自定义补丁或功能
  • ...

SDK 不能做的事:

  • 构建固件映像
  • 编译内核模块
  • ...

依赖要求

要使用 SDK,需要预先安装对应的依赖,请参阅 Build system setup

  • 对于 Debian 系发行版,您可以执行以下命令完成最基础的依赖安装:

    sudo apt-get install -y build-essential ccache clang curl file \
      g++-multilib gawk gcc-multilib gettext git libdw-dev \
      libelf-dev libncurses5-dev locales pv pwgen python \
      python3 python3-pip qemu-utils rsync signify-openbsd \
      subversion sudo swig unzip wget zlib1g-dev
  • 对于 Arch Linux 系发行版,可以安装 metapackage openwrt-devel

    sudo yay -S openwrt-devel

Important

上述软件包只包括使用 SDK 所必须的依赖。部分软件包可能需要额外安装依赖,请善用搜索引擎。


获取 SDK

您可以下载由 ImmortalWrt 项目提供的预编译 SDK,也可以自行从源码构建,在 buildroot 中启用 CONFIG_SDK 即可。预编译 SDK 与固件映像位于同一文件夹中。

如需下载 ImmortalWrt 提供的预编译 SDK,可通过以下方法确定路径:

  1. 登录 LuCI 后台,在 概览 -> 状态 中找到 目标平台 以及 固件版本
  2. 以 x86/64 为例,目标平台为 x86/64,固件版本为 ImmortalWrt 21.02.6,则对应 SDK 目录为:
    releases/21.02.6/targets/x86/64
  3. SDK 统一命名为 immortalwrt-sdk[-<version>]-<platform>_gcc-<gcc_version>_musl.Linux-<sdk_arch>.tar.xz
    immortalwrt-sdk-21.02.6-x86-64_gcc-8.4.0_musl.Linux-x86_64.tar.xz
  • 如果使用 docker,可以直接 pull 我们提供的镜像:

    docker run --rm -it immortalwrt/sdk:x86-64-openwrt-21.02.6

    您可以在 此处 获取所有可用 tags。

Warning

ImmortalWrt 项目所提供的预编译 SDK 仅供 x86_64 / AMD64 平台使用,其他架构则需要自行构建。

Note

在稳定发布版本中,SDK 所包含的源码会被固定版本,因此无法收到当前分支最新的更新。
您可以从当前分支的快照版本中获取 SDK,如 releases/21.02-SNAPSHOT/targets/x86/64 或 sdk:x86-64-21.02-SNAPSHOT

Note

ImmortalWrt 目前拥有多个镜像站,您可以从最快的镜像中下载:
https://downloads.immortalwrt.org/acknowledgements.html

使用 SDK

Warning

以下所有操作必须以非特权用户(non-root)身份执行。

初始化 SDK

  • 解压或 pull SDK 后,可按需修改 feeds.conf.default,增加自己需要的第三方软件源,如:

    src-link local_feed /path/to/local/custom/feed
    src-git remote_feed <repo url>[;<branch>]
    

    [!IMPORTANT]
    如需覆盖 ImmortalWrt 中已有的软件包,请确保将您自己的源放置在默认源上方。
    或者,您也可以直接将软件包放置在 package/ 路径下。

  • 更新软件源,刷新软件包列表

    ./scripts/feeds update -a
  • 安装需要编译的软件包

    ./scripts/feeds install <package name>

    install 参数说明:

    • -a:安装软件源中的所有软件包;如果指定了 -p,则安装特定软件源中的所有软件包
    • -p <feed name>:优先从此软件源中安装包
    • -d <m/n>:为安装的软件包设置默认状态(m:选中,n:未选中)
    • -f:如果目前已经安装了同名软件包,则强制覆盖

    [!NOTE]
    可以使用命令 ./scripts/feeds list 查看所有可用软件包及其描述

  • 更新 buildroot 配置

    运行命令 make menuconfigmake nconfig,配置自己需要的软件包。

    [!NOTE]
    默认情况下,buildroot 会选中所有软件包,您可以在首次配置时进入 Global build settings 取消选中。

编译软件包

由于默认情况下 SDK 会选中所有软件包,在未经额外配置的情况下,不建议直接使用 make 进行全量编译。
在编译时,您可以指定需要编译的软件包,如:

make package/path/to/package/compile V=s

buildroot 会自动寻找软件包所在目录,所以也可以简化为:

make package/<pkg folder name>/compile V=s

编译完毕后,可以在 bin/packagesbin/targets/<platform>/packages 目录下找到编译好的 .ipk 文件。
可以通过 LuCI 系统 -> 软件包 -> 上传软件包 进行安装。


参考

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant