请选择 进入手机版 | 继续访问电脑版

forum.gl-inet.cn

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
    查看: 14478|回复: 58

    怎样使用SDK编译自己的软件包

      [复制链接]

    76

    主题

    2144

    帖子

    9874

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    9874

    官方人员

    发表于 2022-2-16 18:27:32 | 显示全部楼层 |阅读模式
    openwrt的软件包对编译环境有依赖,如果软件包的编译环境和固件的环境不一样,可能出现编译出来的ipk无法安装或运行的情况
    下面介绍怎样使用openwrt的SDK编译ipk

    1. 根据设备型号或CPU架构选择适合自己的SDK
           GLINET目前最新发布版本(3.211)的固件使用的是openwrt 19.07.8的版本,对应型号SDK的下载链接如下
           MIPS_24KC架构ATH79目标的产品,AR150,AR300M,MIFI,USB150,AR750,AR750S,E750,X750,XE300 下载链接
           MIPSEL_24KC架构RAMIPS目标的产品,N300,MT300N-V2 下载链接
           MIPSEL_24KC架构RAMIPS目标的产品,MT1300 下载链接

    2. 部署SDK环境,下面我以MIPS_24KC的CPU架构在Ubuntu 21.04的环境下操作例,请勿直接复制命令,根据自己实际情况修改
           a. 将下载的SDK压缩包拷贝到自己的Linux环境下,然后解压并进入目录
    1. tar -xvf openwrt-sdk-19.07.8-ath79-nand_gcc-7.5.0_musl.Linux-x86_64.tar.xz
    2. cd openwrt-sdk-19.07.8-ath79-nand_gcc-7.5.0_musl.Linux-x86_64/
    复制代码
         b. 在SDK的feed中添加自己的软件包文件夹路径,编辑feeds.conf.default文件,/home/glinet/work/soft/helloworld是我本地存放软件包的目录,特别注意,一定将自己添加的放在第一行,这样总是自己本地的源码优先  
          
          c. 索引软件包列表
    1. ./scripts/feeds update -a
    2. ./scripts/feeds install -a
    复制代码

    3. 编译自己的软件包
        a. 使用下面命令将所有的软件包都选择上
    1. echo CONFIG_ALL=y >.config
    2. make defconfig
    复制代码
       b. 编译,命令中的local是在feed设置时的名字,tcping是我本地目录下的软件包
    1. make V=s ./package/feeds/local/tcping/compile
    复制代码
       c. 编译好的软件包在bin/package/CPU架构/feed名 目录下查找


    4. 按照上面的步骤编译出来的ipk就是可以安装并运行的








    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    5

    主题

    40

    帖子

    147

    积分

    注册会员

    Rank: 2

    积分
    147
    发表于 2022-3-27 14:04:17 | 显示全部楼层
    本帖最后由 w116355893 于 2022-3-27 14:39 编辑

    终于成功编译出了hello world,属实不容易,虽然用的不是楼主的方法,但放在这里给大家提供一个参考吧(虽然这个方法的过程也非常曲折)
    首先,我用的是sft1200的路由器,SDK楼主也已经给出了下载下来就好了。

    1.编写自己的程序
         作为一个软件包,他的基本结构如下所示

    在src中的Makefile就和写C差不多,代码如下
    helloworld : helloworld.o
            $(CC) $(LDFLAGS) helloworld.o -o helloworld

    helloworld.o : helloworld.c
            $(CC) $(CFLAGS) -c helloworld.c

    clean :
            rm *.o helloworld        
    特别提醒:开头是tab不是space(空格)!!
    接下来是外层的Makefile,这玩意儿属实折磨,虽然就几行结果各种问题(C还是得好好复习),下面直接给成品
    include $(TOPDIR)/rules.mk

    PKG_NAME:=helloworld
    PKG_RELEASE:=1.0

    PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
    PKG_CONFIG_DEPENDS :=

    include $(INCLUDE_DIR)/package.mk
    define Package/helloworld
            SECTION:=utils
            CATEGORY:=Utilities
            TITLE:=Hellworld Program
    endef

    define Package/helloworld/description
            a OpenWrt demo of Hello World .
    endef

    define Build/Prepare
            mkdir -p $(PKG_BUILD_DIR)
            $(CP) ./src/* $(PKG_BUILD_DIR)/
    endef

    define Package/helloworld/install
            $(INSTALL_DIR) $(1)/usr/sbin
            $(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/usr/sbin/helloworld
    endef

    $(eval $(call BuildPackage,helloworld))
    同样,千万别忘了tab
    3. 放入SDK
        做完1,2两步后,将整个文件例放入SDK下的package中。
    4. 编译
        在SDK目录下输入:
    1. make package/helloworld/compile V=s
    复制代码
       指令中间的helloworld是你的package的名字。
    5.完成后,输入指令
    1. find bin/ -name "helloworld*.ipk"
    复制代码
       就可以找到编译好的ipk文件,上传到路由器然后安装就完事了。

    6.尾巴最后非常感谢楼主大大提供的帮助,我真的哭死








    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    回复

    使用道具 举报

    0

    主题

    2

    帖子

    22

    积分

    新手上路

    Rank: 1

    积分
    22
    发表于 2022-3-12 08:22:53 | 显示全部楼层
    你好 我淘宝买了个 sft1200  请问sdk在哪里下载
    回复

    使用道具 举报

    76

    主题

    2144

    帖子

    9874

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    9874

    官方人员

     楼主| 发表于 2022-3-12 10:17:48 | 显示全部楼层
    廖杰 发表于 2022-3-12 08:22
    你好 我淘宝买了个 sft1200  请问sdk在哪里下载

    在这里
    https://github.com/gl-inet-builder/openwrt-sdk-siflower-1806
    回复

    使用道具 举报

    0

    主题

    2

    帖子

    22

    积分

    新手上路

    Rank: 1

    积分
    22
    发表于 2022-3-13 14:30:53 | 显示全部楼层
    clone 不动 啊 我10M的网速也下不下来呀~
    Cloning into './feeds/base'...
    remote: Enumerating objects: 104408, done.
    remote: Counting objects: 100% (104408/104408), done.
    remote: Compressing objects: 100% (80773/80773), done.
    remote: Total 104408 (delta 17848), reused 104209 (delta 17825), pack-reused 0
    Receiving objects: 100% (104408/104408), 812.84 MiB | 1.76 MiB/s, done.
    Resolving deltas: 100% (17848/17848), done.
    Checking out files: 100% (94647/94647), done.
    Create index file './feeds/base.index'
    /home/liaojie/soft_router/openwrt-sdk-siflower-1806/staging_dir/host/bin/find: 'feeds/base/uboot/toolchain/arm/lib64/lib': Too many levels of symbolic links
    /home/liaojie/soft_router/openwrt-sdk-siflower-1806/staging_dir/host/bin/find: 'feeds/base/uboot/toolchain/arm/lib32/lib': Too many levels of symbolic links
    /home/liaojie/soft_router/openwrt-sdk-siflower-1806/staging_dir/host/bin/find: 'feeds/base/uboot/toolchain/arm/lib/lib': Too many levels of symbolic links
    /home/liaojie/soft_router/openwrt-sdk-siflower-1806/staging_dir/host/bin/find: 'feeds/base/uboot/toolchain/mips/lib64/lib': Too many levels of symbolic links
    /home/liaojie/soft_router/openwrt-sdk-siflower-1806/staging_dir/host/bin/find: 'feeds/base/uboot/toolchain/mips/lib32/lib': Too many levels of symbolic links
    /home/liaojie/soft_router/openwrt-sdk-siflower-1806/staging_dir/host/bin/find: 'feeds/base/uboot/toolchain/mips/lib/lib': Too many levels of symbolic links
    Collecting package info: done
    /home/liaojie/soft_router/openwrt-sdk-siflower-1806/staging_dir/host/bin/find: 'feeds/base/uboot/toolchain/arm/lib64/lib': Too many levels of symbolic links
    /home/liaojie/soft_router/openwrt-sdk-siflower-1806/staging_dir/host/bin/find: 'feeds/base/uboot/toolchain/arm/lib32/lib': Too many levels of symbolic links
    /home/liaojie/soft_router/openwrt-sdk-siflower-1806/staging_dir/host/bin/find: 'feeds/base/uboot/toolchain/arm/lib/lib': Too many levels of symbolic links
    /home/liaojie/soft_router/openwrt-sdk-siflower-1806/staging_dir/host/bin/find: 'feeds/base/uboot/toolchain/mips/lib64/lib': Too many levels of symbolic links
    /home/liaojie/soft_router/openwrt-sdk-siflower-1806/staging_dir/host/bin/find: 'feeds/base/uboot/toolchain/mips/lib32/lib': Too many levels of symbolic links
    /home/liaojie/soft_router/openwrt-sdk-siflower-1806/staging_dir/host/bin/find: 'feeds/base/uboot/toolchain/mips/lib/lib': Too many levels of symbolic links
    Collecting target info: done
    Source of feed gli_pub has changed, replacing copy
    Updating feed 'gli_pub' from 'https://hub.fastgit.org/gl-inet/gli-pub.git' ...
    Cloning into './feeds/gli_pub'...

    到这里就卡死了Updating feed 'gli_pub' from 'https://hub.fastgit.org/gl-inet/gli-pub.git' ...   -->换了https://hub.fastgit.org  还是clone不动啊
    Cloning into './feeds/gli_pub'...

    麻烦也搞个下载链接吧~  提供下载吧
    回复

    使用道具 举报

    0

    主题

    53

    帖子

    354

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    354

    官方人员

    发表于 2022-3-14 10:54:10 | 显示全部楼层
    廖杰 发表于 2022-3-13 14:30
    clone 不动 啊 我10M的网速也下不下来呀~
    Cloning into './feeds/base'...
    remote: Enumerating objects: 1 ...

    在feeds.conf.default中将src-git gli_pub https://github.com/gl-inet/gli-pub.git删除

    这个feeds是glinet维护的,github地址为https://github.com/gl-inet/gli-pub,你可以自行clone,如果不需要,不clone也没关系
    回复

    使用道具 举报

    5

    主题

    40

    帖子

    147

    积分

    注册会员

    Rank: 2

    积分
    147
    发表于 2022-3-27 04:19:09 | 显示全部楼层
    make时显示 *** No rule to make target 'package/feeds/local/tcpling/compile'.  Stop.怎么办
    回复

    使用道具 举报

    76

    主题

    2144

    帖子

    9874

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    9874

    官方人员

     楼主| 发表于 2022-3-27 11:08:02 | 显示全部楼层
    w116355893 发表于 2022-3-27 04:19
    make时显示 *** No rule to make target 'package/feeds/local/tcpling/compile'.  Stop.怎么办

    检查一下'package/feeds/local/tcpling这个目录是否存在呢
    回复

    使用道具 举报

    5

    主题

    40

    帖子

    147

    积分

    注册会员

    Rank: 2

    积分
    147
    发表于 2022-3-27 11:14:39 | 显示全部楼层
    萝卜大侠 发表于 2022-3-27 11:08
    检查一下'package/feeds/local/tcpling这个目录是否存在呢

    原来如此,我再去试试,感激!!
    回复

    使用道具 举报

    5

    主题

    40

    帖子

    147

    积分

    注册会员

    Rank: 2

    积分
    147
    发表于 2022-3-27 11:16:46 | 显示全部楼层
    萝卜大侠 发表于 2022-3-27 11:08
    检查一下'package/feeds/local/tcpling这个目录是否存在呢

    请问是在原来设置的local的目录下mkdir tcpling嘛还是说在package的目录下mkdir feeds/local/tcpling呢?
    回复

    使用道具 举报

    5

    主题

    40

    帖子

    147

    积分

    注册会员

    Rank: 2

    积分
    147
    发表于 2022-3-27 11:30:05 | 显示全部楼层
    萝卜大侠 发表于 2022-3-27 11:08
    检查一下'package/feeds/local/tcpling这个目录是否存在呢

    我在package/feeds中mkdir了local/tcpling但是还是会出现同样的问题
    回复

    使用道具 举报

    76

    主题

    2144

    帖子

    9874

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    9874

    官方人员

     楼主| 发表于 2022-3-27 11:36:36 | 显示全部楼层
    w116355893 发表于 2022-3-27 11:16
    请问是在原来设置的local的目录下mkdir tcpling嘛还是说在package的目录下mkdir feeds/local/tcpling呢? ...

    按道理来说你不需要重新建目录才对,教程第2步b点你是根据自己的实际目录修改的吗?
    另外,tcping你好像打成了tcpling
    回复

    使用道具 举报

    5

    主题

    40

    帖子

    147

    积分

    注册会员

    Rank: 2

    积分
    147
    发表于 2022-3-27 12:24:26 | 显示全部楼层
    萝卜大侠 发表于 2022-3-27 11:36
    按道理来说你不需要重新建目录才对,教程第2步b点你是根据自己的实际目录修改的吗?
    另外,tcping你好像打 ...

    关于教程第二步的b的是我在按实际情况修改了的,
    关于tcping我是故意写成tcpling的,在创建目录的时候也是tcpling,是否是应为Makefile中的PKG_BUILD_DIR的原因
    回复

    使用道具 举报

    5

    主题

    40

    帖子

    147

    积分

    注册会员

    Rank: 2

    积分
    147
    发表于 2022-3-27 12:39:36 | 显示全部楼层
    萝卜大侠 发表于 2022-3-27 11:36
    按道理来说你不需要重新建目录才对,教程第2步b点你是根据自己的实际目录修改的吗?
    另外,tcping你好像打 ...

    src-link local /home/softwareOpen/helloworld
    这是我在feeds.conf.default中添加的
    回复

    使用道具 举报

    76

    主题

    2144

    帖子

    9874

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    9874

    官方人员

     楼主| 发表于 2022-3-27 14:07:07 | 显示全部楼层
    w116355893 发表于 2022-3-27 12:24
    关于教程第二步的b的是我在按实际情况修改了的,
    关于tcping我是故意写成tcpling的,在创建目录的时候也 ...

    这里改目录名是没用的哦,如果要改名得改Makefile中的包名才行呢
    回复

    使用道具 举报

    5

    主题

    40

    帖子

    147

    积分

    注册会员

    Rank: 2

    积分
    147
    发表于 2022-3-27 14:17:11 | 显示全部楼层
    萝卜大侠 发表于 2022-3-27 14:07
    这里改目录名是没用的哦,如果要改名得改Makefile中的包名才行呢

    我弄好了,感激!!
    回复

    使用道具 举报

    76

    主题

    2144

    帖子

    9874

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    9874

    官方人员

     楼主| 发表于 2022-3-27 14:38:19 | 显示全部楼层
    w116355893 发表于 2022-3-27 14:17
    我弄好了,感激!!

    不用谢,欢迎发帖提问
    回复

    使用道具 举报

    1

    主题

    9

    帖子

    49

    积分

    新手上路

    Rank: 1

    积分
    49
    发表于 2022-4-27 14:52:25 | 显示全部楼层
    大侠,您好。按照您的教程,编译TCP很快就成功了。但是编译同目录下的其他包,很久都无法编译完成,也没见有什么报错信息,但是感觉是一在一直循环(例如隔一段时间,就看到在checking,而且checking的东西好像都是一样的),请问是还有什么地方需要注意的么?
    编译环境:MIPS_24KC CPU架构、Vmware+Ubuntu 21.04、全局。
    回复

    使用道具 举报

    1

    主题

    9

    帖子

    49

    积分

    新手上路

    Rank: 1

    积分
    49
    发表于 2022-4-27 18:01:18 | 显示全部楼层
    leexiaoyao 发表于 2022-4-27 14:52
    大侠,您好。按照您的教程,编译TCP很快就成功了。但是编译同目录下的其他包,很久都无法编译完成,也没见 ...

    莫名奇妙,删了重新编译,十分钟就好了。。。昨天反复搞了四五次,每次半个小时以上都不行。。。
    回复

    使用道具 举报

    76

    主题

    2144

    帖子

    9874

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    9874

    官方人员

     楼主| 发表于 2022-4-27 21:47:32 | 显示全部楼层
    leexiaoyao 发表于 2022-4-27 18:01
    莫名奇妙,删了重新编译,十分钟就好了。。。昨天反复搞了四五次,每次半个小时以上都不行。。。 ...

    可能是在生成一些依赖呢
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|gl-inet.cn ( 粤ICP备18130956号 )

    GMT+8, 2024-12-7 09:56 , Processed in 0.027231 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表