在demo的makefile中添加相應(yīng)等的文件就可以了,cpp文件相應(yīng)的SRC,h文件的目錄要被包含進(jìn)去,這樣就餓可以了,靜態(tài)庫的路徑要是絕對路徑?。?!,這樣就可以變異通過了。
以S3C6410為例,此時arm-none-linux-gnueabi-4.3.2已經(jīng)安裝完畢。
首先把和板子上燒寫的內(nèi)核同樣的內(nèi)核源碼放置到任意目錄下,如/usr/src/s3c-linux-2.6.28.6-Real6410。(內(nèi)核源碼需要配置,而板子附帶CD上一般是配置好的,在上面修改簡單一些)
進(jìn)行make或。/build。遇到了報錯,找不到XX文件。查看了一下,指定目錄下是有這個文件的。make clean再進(jìn)行。/build就行了。
在需要編譯的目標(biāo)代碼目錄下編寫makefile文件,內(nèi)容如下:
ARCH:= arm
CC:= $(CROSS_COMPILE)gcc
LD:= $(CROSS_COMPILE)ld
obj-m := udpcli.o
KERNELDIR := /usr/src/s3c-linux-2.6.28.6-Real6410
PWD := $(shell pwd)
modules:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
rm -f *.o
rm -f *.symvers
rm -f *.order
rm -f *.ko
rm -f *.mod.c
如果你在瀏覽github的時候發(fā)現(xiàn)一個很好的Linux c語言程序,在桌面平臺編譯一下發(fā)現(xiàn)很好用,這時你想把它移植到OpenWrt平臺上放到路由器上使用,那么要是能把它編譯成ipk文件直接安裝到路由器上就好了。下面就以redsocks2這款軟件為例來介紹使用Ubuntu交叉編譯redsocks2 ipk安裝包的Makefile寫法
選擇Redsocks2作為例子的原因是redsocks這個程序只需運行一行make就可以開始執(zhí)行編譯,沒有復(fù)雜的編譯時配置,并且編譯完成之后會生成一個名為redsocks2的可執(zhí)行文件,把這個文件拷貝出來到磁盤的其他地方都可以運行。也就是說,redsocks2是一個編譯起來非常容易的程序。編譯完成只需獲得一個可執(zhí)行文件就可以開始用了。
下面先在Ubuntu16.04系統(tǒng)上觀察它的編譯過程
首先我們從github上克隆redsocks2的源碼
?。踦lain] view plain copygit clone https://github.com/semigodking/redsocks.git
克隆結(jié)束之后安裝一個依賴庫libevent2,不然編譯的時候會報錯“fatal error: event2/event.h: 沒有那個文件或目錄”
sudo apt-get install libevent-dev
然后觀察一下現(xiàn)在的redsocks2目錄
然后執(zhí)行make,gcc就開始編譯了,編譯完成后再觀察這個目錄,就會發(fā)現(xiàn)多出一個redsocks2的可執(zhí)行文件,我們就可以把這個可執(zhí)行文件拷貝出來然后運行使用了
在Ubuntu上很簡單的就編譯完成了redsocks2,那么在OpenWrt的SDK上如何編譯成ipk呢
首先先下載OpenWrt的SDK,這里也WNDR4300路由器為例
下載完畢之后使用
tar xjf OpenWrt-SDK-ar71xx-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2
?
解壓這個tar包,之后進(jìn)入SDK的主目錄,在package目錄下新建一個名為redsocks2的目錄,然后開始新建一個Makefile文件,內(nèi)容如下
include $(TOPDIR)/rules.mk
PKG_NAME:=redsocks2
PKG_VERSION:=0.66
PKG_RELEASE:=1
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/semigodking/redsocks.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=bc2706a331c04a76df428748da97a7d4b5fa1754
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MAINTAINER:=semigodking 《semigodking@gmail.com》
PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)/$(BUILD_VARIANT)/$(PKG_NAME)-$(PKG_VERSION)
include $(INCLUDE_DIR)/package.mk
define Package/redsocks2
SECTION:=net
CATEGORY:=Network
TITLE:=Redirect any TCP connection to a SOCKS or HTTPS proxy server
URL:=https://github.com/semigodking/redsocks
DEPENDS:=+libevent2 +libopenssl
endef
define Package/redsocks2/description
This is a modified version of original redsocks. \
The name is changed to be REDSOCKS2 since this release to distinguish with original redsocks. \
This variant is useful for anti-GFW (***)。
endef
define Package/redsocks2/conffiles
/etc/config/redsocks2
endef
define Package/redsocks2/install
$(INSTALL_DIR) $(1)/usr/bin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/redsocks2 $(1)/usr/bin
$(INSTALL_DIR) $(1)/etc/redsocks2
$(INSTALL_DATA) 。/files/redsocks2.template $(1)/etc/redsocks2/config.template
endef
$(eval $(call BuildPackage,redsocks2))
評論
查看更多