1、编译的时候,出现:
ISO C90 forbids mixed declarations and code
我一直搞不清出怎么回事,后来上网google一下,发现原来是变量定义之前,如果有非变量语句出现,那么就有这个警告,把非变量移到变量之后,就没有警告了。不用担心,不是程序问题。
2、我用的s3c6410,在使用端口的时候,我没有用内核给出的端口地址,而是根据手册上写的gpio地址,自己定义的。开始没有用ioremap。报oops。后来查来查去,知道想要用端口,那就要用内核给出的端口地址了,自己定义的话就要ioremap一下。当然还要iounmap。别忘了。当然这种方法下使用的是IO MEM了。。不是IO PORT
3、模块卸载。非常的疼。。。我以前都是在ubuntu上做实验,没有上过开发板。在ubuntu上的时候,要卸载模块,比如hello.ko,使用rmmod hello.ko就行了,但是到了开发板上,得用rmmod hello不要有那个ko。
另外,如果rmmod使用后,报说什么chdir怎么怎么了,没记太清楚,是因为你make内核之后,没有make module。make module之后 还要记得用make module_install 将make好的module放入你自己用nfs建立起来的内核文件系统(就是开发板进入的那个文件系统了)。
4、如果想要使用linux内核定义的s3c6410的gpio端口。首先需要包含如下头文件:
#include <mach/map.h> (主要包含的是端口的物理地址与虚拟地址之间的映射,非常重要)
#include <mach/regs-gpio.h>(包含端口的基地址)
#include <mach/gpio-bank-m.h>(我用的飞凌的开发板,LED连在M端口上)
这三个头文件缺一不可,都要包含上。
我用的是linux 2.6.36的内核。
使用的时候,端口名称为:S3C64XX_GPMCON、S3C64XX_GPMDAT、S3C64XX_GPMPUD三个。
5、另外讲个小白问题。。可惜我不懂。。
上面所说的包含的三个头文件,mach/map.h等,在内核源码下arch/arm/mach-s3c64xx/include/mach