CC-A80在lubuntu上原生编译linux内核和驱动的方法(兼容SDK)
本帖最后由 weety 于 2015-10-6 23:55 编辑CC-A80运行的lubuntu上的gcc是4.8.4版本的hardfloat ABI编译器,同A80 SDK的4.6.3版本softfp ABI编译器不兼容,直接使用lubuntu上自带的gcc编译器编译的驱动无法加载。因此我根据SDK的编译器版本及配置重新编译了ARM ubuntu版本的gcc编译器,可以安装到lubuntu上来编译kernel和驱动。
ARM版本的gcc-4.6.3编译器可以在我的百度云下载:http://pan.baidu.com/s/1sj5QAXv
CC-A80内核源码下载路径:https://github.com/cubieboard/CC-A80-kernel-source.git
内核配置文件下载路径:https://github.com/cubieboard/CC ... ga/kernel_defconfig
内核编译脚本下载路径:http://pan.baidu.com/s/1kT4aYnt
需要根据实际路径进行修改。
中间会出现编译错误,可以参考http://www.cubie.cc/forum.php?mod=viewthread&tid=4323#lastpost,这篇帖子中的方法进行处理,主要是解决方法2:
2.arch/arm/mach-sunxi/pm/standby/gen_check_code是X86的二进制执行文件无法在ARM下运行,按Makefile的指令在X86的机上运行后将生成的文件拷到CC-A80对应的文件上,然后注释掉对应的Makefile指令。
如果不涉及到芯片机密信息,全志能够提供gen_check_code工具的源码就更好了,不然总是有个疙瘩在那里。
内核编译采用上面提供的脚本进行,完成了内核编译安装后就可以进行内核模块开发了。
下面给个helloworld模块的例子供大家参考:
helloworld.c源码#include<linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("DUAL BSD/GPL");
static int hello_init(void)
{
printk(KERN_EMERG "Hello world enter\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_EMERG "Hello World exit\n");
}
module_init(hello_init);
module_exit(hello_exit);Makefile文件内容CC := arm-linux-gnueabi-gcc
ifneq ($(KERNELRELEASE),)
obj-m := helloworld.o
else
#KERNELDIR :=/lib/modules/$(shell uname -r)/build
KERNELDIR :=/home/linaro/work/git/CC-A80-kernel-source
PWD := $(shell pwd)
all:
$(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) modules
endif
clean:
rm -f *.o *.ko *.mod.c .hello*内核源码路径可以修改,当然也可以直接安装到系统lib目录下,覆盖原系统的文件,这样可以使用KERNELDIR :=/lib/modules/$(shell uname -r)/build来找到内核源码路径。
执行make命令后得到helloworld.ko文件,使用insmod加载模块执行,使用dmesg命令可以看到helloworld模块加载的打印信息。
以上所有命令编译环境如下:
1.系统Ubuntu-linaro-desktop(Linaro-v1.0) (ARM)
2.工具链arm-linux-gnueabi-
3.GCC版本GCC-4.6.3
希望对大家有所帮助。
gen_check_code二进制工具的逆向工程C源码已经搞定,见帖子:http://cubie.cc/forum.php?mod=viewthread&tid=4488&extra=
想问下楼主,这个二进制工具有什么用
linux_biaon 发表于 2015-10-16 15:57 static/image/common/back.gif
想问下楼主,这个二进制工具有什么用
这个工具是给rusume1.bin加头的,用来回复挂起的系统,这段代码运行在芯片内部SRAM中,该工具可以计算代码长度和计算checksum值。原来给的是X86_64的二进制代码,在板子上不能运行。
linux_biaon 发表于 2015-10-16 15:57 static/image/common/back.gif
想问下楼主,这个二进制工具有什么用
这个工具是给rusume1.bin加头的,用来回复挂起的系统,这段代码运行在芯片内部SRAM中,该工具可以计算代码长度和计算checksum值。原来给的是X86_64的二进制代码,在板子上不能运行。
页:
[1]