=============================== 博客点滴积累,部分话语和知识点来源于网络,感谢网络资源的提供者======
编译OpenWrt程序有两种方法,一种使用SDK,即在makemenuconfig 选中 [*]Build the OpenWrt SDK,编译,生成SDK,解压SDK后目录与OPenWrt目录类似,利用SDK编译,一种是直接编译。这里使用直接编译。
1 在 package目录下创建helloworld目录,并在helloworld目录下创建src目录
yi@yi-desktop:~/openwrt/trunk/package$ mkdir helloworld
yi@yi-desktop:~/openwrt/trunk/package$ cd helloworld/
yi@yi-desktop:~/openwrt/trunk/package/helloworld$ mkdir src
2 编写helloworld程序和Makefile(这个Makefile是编译helloworld.c 用的)
yi@yi-desktop:~/openwrt/trunk/package/helloworld$ cd src/
yi@yi-desktop:~/openwrt/trunk/package/helloworld/src$ vim helloworld.c
yi@yi-desktop:~/openwrt/trunk/package/helloworld/src$ cat helloworld.c
#include<stdio.h>
int main(void)
{
printf("hello world Openwrt!\r\n");
return 0;
}
yi@yi-desktop:~/openwrt/trunk/package/helloworld/src$ vim Makefile
yi@yi-desktop:~/openwrt/trunk/package/helloworld/src$ cat Makefile
C = gcc
FLAG = -Wall
helloworld:
$(CC) $(FLAG)helloworld.c -ohelloworld
clean:
rm *.o helloworld
3 编写helloworld下Makefile(此makefile是供openwrt读的)
参考:http://wiki.wrtnode.com/index.php?title=Openwrt_development/zh-cn点击打开链接
yi@yi-desktop:~/openwrt/trunk/package/helloworld$ vim Makefile
yi@yi-desktop:~/openwrt/trunk/package/helloworld$ cat Makefile
###############################################
#OpenWrt Makefile for helloworld program
##############################################
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 copy 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 copying 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 copy 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))
yi@yi-desktop:~/openwrt/trunk/package/helloworld$ cd ..
yi@yi-desktop:~/openwrt/trunk/package$ cd ..
4 配置选中
yi@yi-desktop:~/openwrt/trunk$ make menuconfig
│ │ Utilities ---> │ │
│ │ <*> helloworld......................... Helloworld -- prints a snarky message │ │
5 编译
yi@yi-desktop:~/openwrt/trunk$ make package/helloworld/compile V=s
注:如果出现一下错误是由于makefile的命令是以tab键开头,拷贝出错了,需要改一下就好了
make[2]: Entering directory `/home/yi/openwrt/trunk/package/helloworld'
Makefile:54: *** missing separator. Stop.
make[2]: Leaving directory `/home/yi/openwrt/trunk/package/helloworld'
make[1]: *** [package/helloworld/compile] Error 2
make[1]: Leaving directory `/home/yi/openwrt/trunk'
make: *** [package/helloworld/compile] 错误 2
编译后的ipk在以下目录
yi@yi-desktop:~/openwrt/trunk$ ls bin/ar71xx/packages/base/
6 使用WinScp上传到路由器的tmp目录
root@OpenWrt:/# ls /tmp/
TZ helloworld_1_ar71xx.ipk resolv.conf
dhcp.leases hosts resolv.conf.auto
dnsmasq.d lock run
empty log state
etc overlay sysinfo
7 安装运行
root@OpenWrt:/# cd tmp/
root@OpenWrt:/tmp# opkg install helloworld_1_ar71xx.ipk
Installing helloworld (1) to root...
Configuring helloworld.
root@OpenWrt:/tmp# helloworld
hello world Openwrt!