forum.gl-inet.cn

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 33040|回复: 59

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

  [复制链接]

77

主题

2144

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10305

官方人员

发表于 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是我本地存放软件包的目录,特别注意,一定将自己添加的放在第一行,这样总是自己本地的源码优先  
       下载.png
      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就是可以安装并运行的
下载.png







回复

使用道具 举报

5

主题

40

帖子

147

积分

注册会员

Rank: 2

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

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

1.编写自己的程序
     作为一个软件包,他的基本结构如下所示
tree.JPG
在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.尾巴最后非常感谢楼主大大提供的帮助,我真的哭死








回复

使用道具 举报

0

主题

2

帖子

22

积分

新手上路

Rank: 1

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

使用道具 举报

77

主题

2144

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10305

官方人员

 楼主| 发表于 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

帖子

356

积分

中级会员

Rank: 3Rank: 3

积分
356

官方人员

发表于 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.怎么办
回复

使用道具 举报

77

主题

2144

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10305

官方人员

 楼主| 发表于 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但是还是会出现同样的问题
回复

使用道具 举报

77

主题

2144

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10305

官方人员

 楼主| 发表于 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中添加的
回复

使用道具 举报

77

主题

2144

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10305

官方人员

 楼主| 发表于 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中的包名才行呢

我弄好了,感激!!
回复

使用道具 举报

77

主题

2144

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10305

官方人员

 楼主| 发表于 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很快就成功了。但是编译同目录下的其他包,很久都无法编译完成,也没见 ...

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

使用道具 举报

77

主题

2144

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10305

官方人员

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-25 13:12 , Processed in 0.029454 second(s), 29 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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