0%

[OpenWrt]交叉编译应用程序之helloworld

openwrt交叉编译生成应用,openwrt已经编译好了,现在编译一个单独的部件安装到树莓派或者路由上。

首先我们在openwrt/package/下建立helloworld文件夹

然后在helloworld文件夹下创建src文件夹

在src文件夹中,我们创建helloworld.c文件和Makefile文件

首先是helloworld.c文件,内容如下

1
2
3
4
5
6
7
#include<stdio.h>

int main(void)
{
printf("hello world Openwrt!\r\n");
return 0;
}

接下来是Makefile文件,内容如下
1
2
3
4
5
6
helloworld:helloworld.o
$(CC) $(LDFLAGS) helloworld.o -o helloworld
hello.o:hello.c
$(CC) $(CFLAGS) -c helloworld.c
clean:
rm *.o helloworld

然后返回到helloworld目录下,继续创建Makefile文件,内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
include $(TOPDIR)/rules.mk
PKG_NAME:=helloworld
PKG_RELEASE:=1
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
include $(INCLUDE_DIR)/package.mk
define Package/helloworld
SECTION:=utils
CATEGORY:=Utilities
TITLE:=Helloworld -- prints a snarky message
endef
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
define Build/Prepare
mkdir -p $(PKG_BUILD_DIR)
$(CP) ./src/* $(PKG_BUILD_DIR)/
endef
define Package/helloworld/install
$(INSTALL_DIR) $(1)/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/helloworld $(1)/bin/
endef
$(eval $(call BuildPackage,helloworld))

注意:在Makefile文件中,命令语句必须用tab键开头,且tab键只能是4个空格才行,否则编译时会报错

现在,我们的文件都准备好了,准备编译

在openwrt/目录下执行make menuconfig

img

其中前两项要注意,选择要安装的树莓派的参数才行

然后到Utilities下面按空格将helloworld前面的M标志选出,保存配置并退出(Utilities这个位置在我们helloworld文件夹下的Makefile文件中指定的)

然后执行以下命令

1
make package/helloworld/compile V=s

编译成功的话,会生成一个ipk文件,我们用find命令找一下

1
find ./ -name helloworld*.ipk

接下来用scp命令将该文件上传的树莓派上

然后在树莓派上安装该文件

1
opkg install hellworld_1_brcm2708.ipk

安装成功后,在树莓派上执行以下命令

1
helloworld

便会打印输出我们的hello world Openwrt!

到此我们就完成了helloworld的编译及安装