分类: LINUX
2013-01-08 14:11:14
本次移植部分代码拷贝自开发板厂家提供的源代码linux 3.0.1
5.1.cp linux 3.0.1/arch/arm/mach-s3c64xx/include/mach/gpio-bank-m.h linux 3.6.7/arch/arm/mach-s3c64xx/include/mach/gpio-bank-m.h
5.2.cp linux 3.0.1/drivers/char/forlinx6410_leds.c linux 3.6.7/drivers/char/ok6410_leds.c
并去掉#include
5.3.linux 3.6.7/drivers/char/Makefile加上obj-m += ok6410_leds.o编译成模块
5.4.linux 3.6.7主目录下make modules然后把编译好的linux 3.6.7/drivers/char/ok6410_leds.ko复制到yaffs2根文件系统的lib/modules目录下
5.5.linux 3.6.7主目录下新建一个文件夹test,里面放有LED应用程序led.c及Makefile文件
5.5.1 led.c内容如下:
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char **argv)
{
int on;
int led_no;
int fd;
if (argc != 3 || sscanf(argv[1], "%d", &led_no) != 1 || sscanf(argv[2],"%d", &on) != 1 ||
on < 0 || on > 1 || led_no < 0 || led_no > 3) {
fprintf(stderr, "Usage: leds led_no 0|1\n");
exit(1);
}
fd = open("/dev/leds0", 0);
if (fd < 0) {
fd = open("/dev/leds", 0);
}
if (fd < 0) {
perror("open device leds");
exit(1);
}
ioctl(fd, on, led_no);
close(fd);
return 0;
}
5.5.2 Makefile内容如下:
CROSS=arm-linux-
CFLAGS= -Wall -O2
all: led
led: led.c
$(CROSS)gcc $(CFLAGS) $< -o $@
clean:
@rm -rf led *.o
5.5.3 在test目录下执行make 生成led可执行文件
5.6 把test文件夹里面的led复制到yaffs2根文件系统目录下的usr/bin目录下
5.7 在yaffs2根文件系统目录下的dev目录下创建设备节点:
# mknod leds c 231 0
5.8 制作烧写到NAND的yaffs文件:
# mkyaffs2image mdev mdev_leds.yaffs
这里的mdev就是我测试的yaffs2根文件系统
把mdev_leds.yaffs烧写到NAND的文件系统分区后重启开发板,系统启动后可以查看到ok6410_leds.ko及
led应用程序:
[root@STANzxd /]# ls
bin fs.sh linuxrc mnt sbin usr
dev home lost+found proc sys var
etc lib mdev.conf root tmp
[root@STANzxd /]# cd lib/modules
[root@STANzxd modules]# ls
ok6410_leds.ko
[root@STANzxd /]# cd usr/bin
[root@STANzxd bin]# ls
led
5.9 加载ok6410_leds.ko模块:
[root@STANzxd modules]# insmod ok6410_leds.ko
5.10 最后测试开发板上的4个led,先依次点亮然后熄灭:
[root@STANzxd /]# led 0 0
[root@STANzxd /]# led 1 0
[root@STANzxd /]# led 2 0
[root@STANzxd /]# led 3 0
[root@STANzxd /]# led 0 1
[root@STANzxd /]# led 1 1
[root@STANzxd /]# led 2 1
[root@STANzxd /]# led 3 1
[root@STANzxd /]#