第一步:裁剪掉板子自带的LCD驱动程序
裁剪一个LCD,不同与以前类似与LED,蜂鸣器之之类的驱动,可以在make menuconfig中直接注释,编译生成zImage 镜像,这样的话将会导致板子很多的功能受限,只能在源码包中/driver/video/s3c-fb0.c中注释驱动,才能把板子自带的LCD驱动干掉!
注释之后make生成新的zImage镜像,在新生成的zImage下载到板子之前,启动板子,可以在/dev的目录下看到fb0设备。
观察在/sys/class/graphics/目录下面页也会有一个fb文件
再把新的镜像文件下载到板子,发现两个目录下的文件都不在了,在自己编写LCD驱动程序之前,需要先了解驱动程序是怎样工作的,设备文件的/dev/fb0 的文件创建过程如下:
编写的模块代码如下:
1 #include <linux/init.h> 2 #include <linux/thread_info.h> 3 #include <linux/module.h> 4 #include <linux/sched.h> 5 #include <linux/errno.h> 6 #include <linux/kernel.h> 7 #include <linux/module.h> 8 #include <linux/slab.h> 9 #include <linux/input.h> 10 #include <linux/init.h> 11 #include <linux/serio.h> 12 #include <linux/delay.h> 13 #include <linux/clk.h> 14 #include <linux/miscdevice.h> 15 #include <linux/io.h> 16 #include <linux/ioport.h> 17 #include <linux/vmalloc.h> 18 #include <linux/dma-mapping.h> 19 #include <linux/export.h> 20 #include <linux/gfp.h> 21 #include <linux/cdev.h> 22 #include <linux/fb.h> 23 #include <asm/dma-mapping.h> 24 #include <asm/uaccess.h> 25 26 #include <linux/gpio.h> 27 #include <mach/gpio.h> 28 #include <plat/gpio-cfg.h> 29 #include <linux/completion.h> 30 #include <linux/miscdevice.h> 31 #include <linux/platform_device.h> 32 #include <linux/usb.h> 33 34 MODULE_LICENSE("GPL"); 35 MODULE_AUTHOR("bunfly"); 36 37 int s3c_probe(struct platform_device *dev); 38 39 struct platform_driver s3c_fb = { 40 .probe = s3c_probe, 41 .driver = { 42 .name = "exynos4-fb", 43 }, 44 }; 45 46 struct fb_info info; 47 48 int test_init(void) 49 { 50 platform_driver_register(&s3c_fb); 51 } 52 53 void test_exit(void) 54 { 55 } 56 57 module_init(test_init); 58 module_exit(test_exit); 59 60 int s3c_probe(struct platform_device *dev) 61 { 62 printk("probe "); 63 register_framebuffer(&info); 64 return 0; 65 } 66 67 68 69 70
通过这个模块,在/dev目录下面可以看到有fb0的设备: