C应用程序:
----------------------------------------
第一种方法:
下载交叉工具链:
下载之后是个bin文件,chmod 777,然后运行,你发现运行不成功,它会提示你怎么改.
之后再运行就成功了,是个图形界面的安装程序.
安装完之后,把环境变量设置好就可以了.
然后就是编译, adb push, 运行.
注意编译的时候一定要加--static:
arm-none-linux-gnueabi-gcc --static t.c -o t
否则运行时会提示:
/system/bin/sh: ./t: No such file or directory
就这么简单.
链接工具命名:
arch-vendor-(os-)abi
1、arm-none-linux-gnueabi (ARM architecture, no vendor, linux OS, and the gnueabi ABI)
用于编译ARM架构的u-boot、linux内核、linux应用等
2、arm-none-eabi
用于编译ARM架构的裸机系统(包括linux的 boot、kernel)
3、arm-eabi
Android ARM 编译器
第二种方法:
用android默认的环境.
/*
建立development/test/,然后创建Android.mk test.c
Android.mk内容如下。
然后在源码的根目录下执行:make test
*/
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := test.c
LOCAL_MODULE := test
LOCAL_MODULE_TAGS := optional
include $(BUILD_EXECUTABLE)
驱动程序:
----------------------------------------
hello.c
#include
#include
static int __init hello_init(void)
{
printk("hellon");
return 0;
}
static void __exit hello_exit(void)
{
printk("exitn");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("Sam");
MODULE_LICENSE("Dual BSD/GPL");
Makefile:
obj-m := modules.o
modules-objs := mod.o
KDIR := ../ep680/msm/
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
rm -rf Module.markers modules.order Module.symvers
如果执行有问题添加CROSS_ARCH试一下。
obj-m := mod.o
mod-objs := hello.o
#KDIR := /lib/modules/$(shell uname -r)/build
KDIR := ../ep680/msm/
CROSS_ARCH := ARCH=arm CROSS_COMPILE=/usr/local/arm-eabi-4.4.3/bin/arm-eabi-
PWD := $(shell pwd)
default:
#$(MAKE) -C $(KDIR) M=$(PWD) modules
$(MAKE) $(CROSS_ARCH) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean
rm -rf Module.markers modules.order Module.symvers
注意:如果在不用交叉编译器,而用gcc,指定的kernel include dir路径是/lib/modules下,那么
一定要用sudo make,否则会出一大堆错误。