交叉编译移植时makefile怎么写?

交叉编译移植时makefile怎么写?,第1张

  在demo的makefile中添加相应等的文件就可以了,cpp文件相应的SRC,h文件的目录要被包含进去,这样就饿可以了,静态库的路径要是绝对路径!!!,这样就可以变异通过了。

  以S3C6410为例,此时arm-none-linux-gnueabi-4.3.2已经安装完毕。

  首先把和板子上烧写的内核同样的内核源码放置到任意目录下,如/usr/src/s3c-linux-2.6.28.6-Real6410。(内核源码需要配置,而板子附带CD上一般是配置好的,在上面修改简单一些)

  进行make或。/build。遇到了报错,找不到XX文件。查看了一下,指定目录下是有这个文件的。make clean再进行。/build就行了。

  在需要编译的目标代码目录下编写makefile文件,内容如下:

  CROSS_COMPILE:= arm-linux-

  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的时候发现一个很好的Linux c语言程序,在桌面平台编译一下发现很好用,这时你想把它移植到OpenWrt平台上放到路由器上使用,那么要是能把它编译成ipk文件直接安装到路由器上就好了。下面就以redsocks2这款软件为例来介绍使用Ubuntu交叉编译redsocks2 ipk安装包的Makefile写法

  选择Redsocks2作为例子的原因是redsocks这个程序只需运行一行make就可以开始执行编译,没有复杂的编译时配置,并且编译完成之后会生成一个名为redsocks2的可执行文件,把这个文件拷贝出来到磁盘的其他地方都可以运行。也就是说,redsocks2是一个编译起来非常容易的程序。编译完成只需获得一个可执行文件就可以开始用了。

  下面先在Ubuntu16.04系统上观察它的编译过程

  首先我们从github上克隆redsocks2的源码

  [plain] view plain copygit clone https://github.com/semigodking/redsocks.git

  克隆结束之后安装一个依赖库libevent2,不然编译的时候会报错“fatal error: event2/event.h: 没有那个文件或目录”

  sudo apt-get install libevent-dev

  然后观察一下现在的redsocks2目录

  交叉编译移植时makefile怎么写?,交叉编译移植时makefile怎么写?,第2张

  然后执行make,gcc就开始编译了,编译完成后再观察这个目录,就会发现多出一个redsocks2的可执行文件,我们就可以把这个可执行文件拷贝出来然后运行使用了

  交叉编译移植时makefile怎么写?,交叉编译移植时makefile怎么写?,第3张

  在Ubuntu上很简单的就编译完成了redsocks2,那么在OpenWrt的SDK上如何编译成ipk呢

  首先先下载OpenWrt的SDK,这里也WNDR4300路由器为例

  交叉编译移植时makefile怎么写?,交叉编译移植时makefile怎么写?,第4张

  下载完毕之后使用

  tar xjf OpenWrt-SDK-ar71xx-for-linux-x86_64-gcc-4.8-linaro_uClibc-0.9.33.2.tar.bz2
 

  解压这个tar包,之后进入SDK的主目录,在package目录下新建一个名为redsocks2的目录,然后开始新建一个Makefile文件,内容如下

  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 《[email protected]

  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 (Great Fire Wall)。

  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))

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2717429.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存