#!/bin/bash
#搭建编译环境
#编译OpenWrt需要Linux环境或mac环境,不支持Windows,如果要在Windows上开发,那么肯定是要装虚拟机的。
#Linux(建议使用Ubuntu14.04/16.04 32位/64位版本)
#注意1: 在Ubuntu18.04上编译将无法通过,所以推荐使用低版本编译
#注意2: 如果提示找不到openjdk-8-jdk,可以试试openjdk-7-jdk
#编译前要安装以下依赖:
echo "123456" |sudo -S -sH #以root用户登录,"123456"是你的账户密码
#apt-get install git g++ make libncurses5-dev subversion libssl-dev gawk libxml-parser-perl unzip wget python xz-utils vim zlibc zlib1g zlib1g-dev openjdk-7-jdk build-essential ccache gettext xsltproc -y
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo unzip sharutils subversion libncurses5-dev ncurses-term zlib1g-dev subversion git-core gawk asciidoc libz-dev zlib1g-dev libssl-dev openssl
#如果是64位,需要多操作如下步骤:
# 获取系统位数
get_system_bit(){
getconf LONG_BIT
}
if [ "$(get_system_bit)" -eq "64" ]
then
dpkg --add-architecture i386
apt-get update
apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386 -y
fi
git clone https://dev.tencent.com/u/widora/p/openwrt_widora
cd openwrt_widora
make
注意:ubuntu下路径一定要中文!!!若subversion已安装,注意中文路径,不然执行make就会报下述错误。测试开发环境是否搭建好
![]()
|
|
menuconfig配置界面 |
打开teminal,输入配置指令,若弹出menuconfig配置界面则编译环境已经搭建成功.
添加自定义开发软件包
进入到下载的openwrt源码目录,将我们的工程源码添加到openwrt/package/目录下,并增加一个我们的Makefile编译文件:
# # Copyright (C) 2010-2015 Jo-Philipp Wich <jow@openwrt.org> # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # include $(TOPDIR)/rules.mk OPENWRT_DIR:=/home/sz/work/openwrt_c820/staging_dir/target-mipsel_24kec+dsp_uClibc-0.9.33.2 PKG_NAME:=c820_diag #自定义软件包名 PKG_RELEASE:=1.00 PKG_USE_MIPS16:=0
include $(INCLUDE_DIR)/package.mk define Package/$(PKG_NAME) SECTION:=utils CATEGORY:=Utilities TITLE:= Application for c820 MAINTAINER:=Jo-Philipp Wich <jow@openwrt.org> DEPENDS:=+libpthread +libxml2 +libiconv +libiconv-full +libiot_sdk +libiot_hal +libiot_tls +librt # 编译时候自动添加的依赖项 endef
define Package/$(PKG_NAME)/description echo "" endef
define Build/Prepare mkdir -p $(PKG_BUILD_DIR) cp * $(PKG_BUILD_DIR) -rf endef #编译时候依赖的源码文件以及指定的依赖库等 #-I指定源*.c文件依赖的头文件,-L指定依赖库路径 ,-l动态链接库 define Build/Compile $(TARGET_CC) $(TARGET_CFLAGS) -fprofile-generate -o $(PKG_BUILD_DIR)/$(PKG_NAME) $(PKG_BUILD_DIR)/application/*.c $(PKG_BUILD_DIR)/application/mqtt/*.c $(PKG_BUILD_DIR)/application/car/*.c $(PKG_BUILD_DIR)/application/commonlib/*.c $(PKG_BUILD_DIR)/application/diaglib/*.c $(PKG_BUILD_DIR)/application/diaglib/MiscLib/*.c $(PKG_BUILD_DIR)/application/menulib/*.c $(PKG_BUILD_DIR)/application/netlib/*.c $(PKG_BUILD_DIR)/application/SysSet/*.c $(PKG_BUILD_DIR)/encrypt/*.c -I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/usr/include/libxml2 -I$(PKG_BUILD_DIR)/include -I$(PKG_BUILD_DIR)/include/exports -I$(PKG_BUILD_DIR)/include/imports -I$(PKG_BUILD_DIR)/application -I$(PKG_BUILD_DIR)/application/car -I$(PKG_BUILD_DIR)/application/commonlib -I$(PKG_BUILD_DIR)/application/netlib -I$(PKG_BUILD_DIR)/application/menulib -I$(PKG_BUILD_DIR)/application/diaglib -I$(PKG_BUILD_DIR)/application/diaglib/MiscLib -I$(PKG_BUILD_DIR)/application/diaglib/SysSet -I$(PKG_BUILD_DIR)/encrypt -L$(PKG_BUILD_DIR)/lib -L$(OPENWRT_DIR)/root-ramips/usr/lib/ -I$(OPENWRT_DIR)/usr/lib/libiconv-full/include -lpthread -liot_sdk -liot_hal -liot_tls -lxml2 -lm -liconv -lrt endef define Package/$(PKG_NAME)/install $(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_BIN)$(PKG_BUILD_DIR)/$(PKG_NAME) $(1)/usr/sbin/$(PKG_NAME) endef $(eval $(call BuildPackage,$(PKG_NAME)) |
测试Makefile文件是否有错误
|
如果能找到我们在Makefile中自定义的软件包名,则说明Makefile编写规则正确。