openwrt交叉编译生成应用,openwrt已经编译好了,现在编译一个单独的部件安装到树莓派或者路由上。
首先我们在openwrt/package/下建立helloworld文件夹
然后在helloworld文件夹下创建src文件夹
在src文件夹中,我们创建helloworld.c文件和Makefile文件
首先是helloworld.c文件,内容如下1
2
3
4
5
6
7
int main(void)
{
printf("hello world Openwrt!\r\n");
return 0;
}
接下来是Makefile文件,内容如下1
2
3
4
5
6helloworld: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
23include $(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
其中前两项要注意,选择要安装的树莓派的参数才行
然后到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的编译及安装