CubieBoard中文论坛

 找回密码
 立即注册
搜索
热搜: unable
查看: 7308|回复: 4

CC-A80在lubuntu上原生编译linux内核和驱动的方法(兼容SDK)

[复制链接]
发表于 2015-10-6 23:45:00 | 显示全部楼层 |阅读模式
本帖最后由 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源码
  1. #include<linux/init.h>
  2. #include<linux/module.h>

  3. MODULE_LICENSE("DUAL BSD/GPL");

  4. static int hello_init(void)
  5. {
  6.         printk(KERN_EMERG "Hello world enter\n");
  7.         return 0;
  8. }

  9. static void hello_exit(void)
  10. {
  11.         printk(KERN_EMERG "Hello World exit\n");
  12. }

  13. module_init(hello_init);
  14. module_exit(hello_exit);
复制代码
Makefile文件内容
  1. CC := arm-linux-gnueabi-gcc

  2. ifneq ($(KERNELRELEASE),)
  3.         obj-m := helloworld.o
  4. else
  5.         #KERNELDIR :=/lib/modules/$(shell uname -r)/build
  6.         KERNELDIR :=/home/linaro/work/git/CC-A80-kernel-source
  7.         PWD := $(shell pwd)
  8. all:
  9.         $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) modules
  10. endif

  11. clean:
  12.         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

希望对大家有所帮助。



kernel.tar.gz

21.63 KB, 下载次数: 0, 下载积分: 金钱 -1

内核默认配置文件和编译脚本

helloworld-modules.tar.gz

542 Bytes, 下载次数: 0, 下载积分: 金钱 -1

helloworld模块源码和Makefile文件

回复

使用道具 举报

 楼主| 发表于 2015-10-10 23:23:33 | 显示全部楼层



gen_check_code二进制工具的逆向工程C源码已经搞定,见帖子:http://cubie.cc/forum.php?mod=viewthread&tid=4488&extra=

回复 支持 反对

使用道具 举报

发表于 2015-10-16 15:57:04 | 显示全部楼层
想问下楼主,这个二进制工具有什么用
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-16 21:13:40 | 显示全部楼层
linux_biaon 发表于 2015-10-16 15:57
想问下楼主,这个二进制工具有什么用

这个工具是给rusume1.bin加头的,用来回复挂起的系统,这段代码运行在芯片内部SRAM中,该工具可以计算代码长度和计算checksum值。原来给的是X86_64的二进制代码,在板子上不能运行。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-10-16 21:13:23 | 显示全部楼层
linux_biaon 发表于 2015-10-16 15:57
想问下楼主,这个二进制工具有什么用

这个工具是给rusume1.bin加头的,用来回复挂起的系统,这段代码运行在芯片内部SRAM中,该工具可以计算代码长度和计算checksum值。原来给的是X86_64的二进制代码,在板子上不能运行。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|粤ICP备13051116号|cubie.cc---深刻的嵌入式技术讨论社区

GMT+8, 2024-4-27 05:39 , Processed in 0.028238 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc. | Style by Coxxs

返回顶部