当前位置:首页 » 编程软件 » sdk编译ipk

sdk编译ipk

发布时间: 2023-01-24 18:29:06

① sdk 编译器 之间关系

SDK,即软件开发包,里面一般包含有编译器和编译时需要的支持库。(有时候不一定有编译器)

Symbian平台的开发,我没做过。VC,我们看到的界面,只是一个编辑窗口,编译的时候,它会调用相关的编译器,并使用某些设定的编译参数。我猜测如下:
Symbian的软件包里,应该带有编译器和相关的支持库,并且在安装的时候,它会修改VC的配置文件,使得其中关于Symbian的工程,调用自带的编译器和自设的参数来编译程序。

② 如何编译gevent

下面大致讲下编译过程:

获得一份对应平台的SDK[2]

将下载的Makefile按如下结构放入packages文件夹
[lesca@centos package]$ tree
.
├—— gevent
│ └—— Makefile
├—— greenlet
│ └—— Makefile
├—— libevent
│ └—— Makefile
├—— Makefile
└—— rules.mk

在SDK根目录运行make

注意:直接运行make,不需要menuconfig
编译好后会在bin/brcm47xx/packages目录下产生以下ipk文件:
[lesca@centos packages]$ ls *.ipk
gevent_0.13.8-1_brcm47xx.ipk
libevent2-core_2.0.16-1_brcm47xx.ipk
libevent2-extra_2.0.16-1_brcm47xx.ipk
libevent2-openssl_2.0.16-1_brcm47xx.ipk
libevent2-pthreads_2.0.16-1_brcm47xx.ipk
libevent2_2.0.16-1_brcm47xx.ipk
python-greenlet_0.4.0-1_brcm47xx.ipk

放到路由器上,依次安装:
opkg install libevent2*
opkg install python-greenlet_0.4.0-1_brcm47xx.ipk
opkg install gevent_0.13.8-1_brcm47xx.ipk

③ 如何将openwrt ipk包直接编译到固件

如果你只是要编译一个自定义的固件(默认带什么软件,不带什么软件,自定义默认的配置等等),那推荐你用ImageBuilder,简单快速,省心省力 你要是需要自己开发软件包,用OpenWRT的SDK,直接出ipk文件 要完全重写就buildroot

④ openwrt-SDK编译成功但找不到ipk

解压之后就是OpenWrt-SDK-ar71xx-for-linux-i686-gcc-4.6-linaro_uClibc-0.9.33.2,此目录结构跟openwrt的目录结构基本一致

[cpp] view plain
song@song-virtual-machine:attitude_adjustment# ls bin/ar71xx/OpenWrt-SDK-ar71xx-for-linux-i686-gcc-4.6-linaro_uClibc-0.9.33.2
bin Config.in docs include logs package Packages.gz rules.mk staging_dir tmp
build_dir dl feeds.conf.default LICENSE Makefile Packages README.SDK scripts target
[cpp] view plain
song@song-virtual-machine:attitude_adjustment# ls
bin build_dir dl feeds.conf.default LICENSE Makefile README scripts target toolchain
BSDmakefile Config.in docs feeds include

⑤ Openwrt 编译ipk出错,如下错误,怎么解决 denghuinow@Ubuntu:

程序包有问题,或者缺少其他依赖包,感觉,建议不成熟见谅

⑥ openwrt最大连接数内存

成为第157位粉丝
64m及以上。
要确定硬件支持,主要是主芯片是否支持,然后再看闪存和内存是否够用,如果不够,把内存换好之后再换闪存,一般先用编程器把OPENWRT刷入闪存再焊到板上。
openwrt默认没有rtl8111专属的r8168驱动,默认使用r8169驱动兼容。但是用iperf3实测内网只能跑满880m而且速度不太稳定。可以用openwrt官方系统直接下载对应sdk去编译,编译出来ipk安装后重启。

⑦ Android Framework 之 使用系统编译的文件 添加到 SDK 的源码

在上一篇文章中: Android Framework 添加新的 系统服务
我们添加了 新的 系统服务 DemoManagerService, 客户端可以通过 DemoManager.java 访问
但是 使用 Android Studio 新建一个项目时,是不能直接使用DemoManager.java, 因为当前Android Studio使用的是Google 原生的SDK (API31),并没没有我们新增的服务.
由此,产生一个debug 的需求: 使用系统编译的文件 替换掉 SDK 的源码
以达到我们可以在Android studio 可以使用新的服务。

总的思想是,将新增、修改的类的编译成字节码文件,然后把它放到 android.jar中.

(JAVA_LIBRARIES, 不同厂商产物不一样)
例如路径: androidout argetcommonobjJAVA_LIBRARIESframework_intermediates
然后解压这个路径下 class 的 jar 包
则可以在路径:
(1) androidapp 下, 找到:

(2) androidcontent

先找到 如: [SDK安装路径]platformsandroid-31目录,
将目录下的 android.jar 解压,将上面的五个文件, 添加到SDK 源码对应的目录中,即

[SDK安装路径]platformsandroid-31androidandroidapp
[SDK安装路径]platformsandroid-31androidandroidcontent

然后,重新压缩 android文件, 并把后缀改为 android.jar (即替换掉原来的android.jar)

则可以使用DemoManager

⑧ 如何在OpenWRT环境下做开发

1、搭建开发环境
首先,在执行make menuconfig后,会出现下图:

其中,图中红框部分是我定制路由器的系统版本,大家可以根据不同的路由器进行不同的选择;绿框部分表示我们需要编译一个SDK开发环境(默认情况下,此项未勾选)。

编译过程中需要通过官网下载很多相关的软件包,所以必须保证能够顺利连上外网。由于下载速度的限制,编译过程大概需要数小时。编译结束后,所有的产品都会放在编译根目录下的bin/yourtarget/. 例如:我所编译的产物都放在./bin/brcm47xx/下,其中文件主要有几类:

(1).bin/.trx 文件: 这些都是在我们所选的target-system的类别之下,针对不同路由器型号、版本编译的路由器固件。这些不同路由器的型号和版本是openwrt预先设置好的,我们不需要更改。至于.bin和.trx的区别,一种说法是,第一次刷路由器的时候,需要用.bin文件,如果需要再升级,则不能再使用.bin文件,而需要用.trx文件。原因是,.bin是将路由器的相关配置信息和.trx封装在一起而生成的封包,也就是说是包含路由器版本信息的.trx。在第一次刷固件的时候,我们需要提供这样的信息,而在后续升级时,则不再需要,用.trx文件即可。

(2)packages文件夹: 里面包含了我们在配置文件里设定的所有编译好的软件包。默认情况下,会有默认选择的软件包。

(3)OpenWrt-SDK.**.tar.bz2: 这个也就是我们定制编译好的OpenWRT SDK环境。我们将用这个来进行OpenWrt软件包的开发。例如,我所编译好的SDK环境包为:/bin/brcm47xx/OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2
可以从名称上看出,target system是brcm47xx,host system是Linux-x86_64,使用的编译工具以及库是4.3.3+cs_uClibc-0.9.30.1。

(4)md5sums 文件: 这个文件记录了所有我们编译好的文件的MD5值,来保证文件的完整性。因为文件的不完整,很容易将路由器变成“砖头”。

需要主要的是,编译完成后,一定要将编译好的bin目录进行备份(如果里面东西对你很重要的话),因为在下次编译之前,执行make clean 会将bin目录下的所有文件给清除掉!!

2、 更改原有packages

在编译根目录下会有一个dl的目录,这个目录其实是“download”的简写,在编译前期,需要从网络下载的数据包都会放在这个目录下,这些软件包的一个特点就是,会自动安装在所编译的固件中,也就是我们make menuconfig的时候,为固件配置的一些软件包。如果我们需要更改这些源码包,只需要将更改好的源码包打包成相同的名字放在这个目录下,然后开始编译即可。编译时,会将软件包解压到build_dir目录下。
当然,你也可以自己在dl里面创建自己的软件包,然后更改相关的配置文件,让openwrt可以识别这个文件包。

由于我的项目更改的内容是底层的,需要跟固件一起安装。所以,我使用的方法就是直接更改dl目录下软件包,然后重新进行固件编译。感觉类似于Linux的内核编译。反复编过十多次,没有任何问题。

3、 新建自己的packages
对于自己新建的package,而这个package又不需要随固件一起安装,换句话说,就是可以当做一个可选软件包的话。我们可以利用我们的SDK环境来单独编译,编译后会生成一个ipk的文件包。然后利用 opkg install xxx.ipk 来安装这个软件。

下面具体说下,如何编译一个helloword的软件包。
(1)首先,编写helloworld程序
编写helloworld.c
/****************
* Helloworld.c
* The most simplistic C program ever written.
* An epileptic monkey on crack could write this code.
*****************/

#include <stdio.h>
#include <unistd.h>
int main(void)
{
printf("Hell! O' world, why won't my code compile? ");
return 0;
}

编写Makefile文件
# build helloworld executable when user executes "make"

helloworld: helloworld.o
$(CC) $(LDFLAGS) helloworld.o -o helloworld

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

# remove object files and executable when user executes "make clean"
clean:
rm *.o helloworld
在这两个文件的目录下,执行make 应该可以生成helloworld的可执行文件。执行helloworld后,能够打印出“Hell! O' world, why won't my code compile?”。 这一步,主要保证我们的源程序是可以正常编译的。下面我们将其移植到OpenWRT上。

(2)将OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2解压
tar –xvf OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1.tar.bz2

(3)进入SDK
cd OpenWrt-SDK-brcm47xx-for-Linux-x86_64-gcc-4.3.3+cs_uClibc-0.9.30.1
可以看到里面的目录结构跟我们之前source的目录结构基本相同,所需要编译的软件包,需要放置在package目录下

(4)在package目录下创建helloworld目录
cd package
mkdir helloworld
cd helloworld

(5)创建src目录,拷贝 helloworld文件
mkdir src
cp /home/wrt/test/helloworld.c src
cp /home/wrt/test/Makefile src

(6)在helloworld目录下创建Makefile文件
这个Makefile文件是给OpenWRT读的,而之前写的那个Makefile文件是针对helloworld给编译其读的。两个Makefile不在同一层目录下。

touch Makefile
vim Makefile

Makefile文件模板内容如下:
##############################################
# OpenWrt Makefile for helloworld program
#
#
# Most of the variables used here are defined in
# the include directives below. We just need to
# specify a basic description of the package,
# where to build our program, where to find
# the source files, and where to install the
# compiled program on the router.
#
# Be very careful of spacing in this file.
# Indents should be tabs, not spaces, and
# there should be no trailing whitespace in
# lines that are not commented.
#
##############################################

include $(TOPDIR)/rules.mk

# Name and release number of this package
PKG_NAME:=helloworld
PKG_RELEASE:=1

# This specifies the directory where we're going to build the program.
# The root build directory, $(BUILD_DIR), is by default the build_mipsel
# directory in your OpenWrt SDK directory
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

# Specify package information for this program.
# The variables defined here should be self explanatory.
# If you are running Kamikaze, delete the DESCRIPTION
# variable below and uncomment the Kamikaze define
# directive for the description below
define Package/helloworld
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Helloworld -- prints a snarky message
endef

# Uncomment portion below for Kamikaze and delete DESCRIPTION variable above
define Package/helloworld/description
If you can't figure out what this program does, you're probably
brain-dead and need immediate medical attention.
endef

# Specify what needs to be done to prepare for building the package.
# In our case, we need to the source files to the build directory.
# This is NOT the default. The default uses the PKG_SOURCE_URL and the
# PKG_SOURCE which is not defined here to download the source from the web.
# In order to just build a simple program that we have just written, it is
# much easier to do it this way.
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef

# We do not need to define Build/Configure or Build/Compile directives
# The defaults are appropriate for compiling a simple program such as this one

# Specify where and how to install the program. Since we only have one file,
# the helloworld executable, install it by ing it to the /bin directory on
# the router. The $(1) variable represents the root directory on the router running
# OpenWrt. The $(INSTALL_DIR) variable contains a command to prepare the install
# directory if it does not already exist. Likewise $(INSTALL_BIN) contains the
# command to the binary file from its current location (in our case the build
# directory) to the install directory.
define Package/helloworld/install
$(INSTALL_DIR) $(1)/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/bin/
endef

# This line executes the necessary commands to compile our program.
# The above define directives specify all the information needed, but this
# line calls BuildPackage which in turn actually uses this information to
# build a package.
$(eval $(call BuildPackage,helloworld))

(7)返回到SDK的根目录
执行make进行编译
编译过程会在build_dir目录下完成
编译结果会放在 bin/[yourtarget]/package目录下helloworld_1_bcm47xx.ipk

(8)上传helloworld_1_bcm47xx.ipk
使用sftp软件上传helloworld_1_bcm47xx.ipk至路由器
执行 opkg install helloworld_1_bcm47xx.ipk
输入hello然后按Tab键,发现openwrt中已经有helloworld可执行命令。
执行 helloworld 查看程序的效果。

Hell! O' world, why won't my code compile?

【End】

希望对大家能有帮助 :)

转载

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:710
制作脚本网站 发布:2025-10-20 08:17:34 浏览:972
python中的init方法 发布:2025-10-20 08:17:33 浏览:681
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:833
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:741
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1081
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:312
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:192
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:880
python股票数据获取 发布:2025-10-20 07:39:44 浏览:837