📄 lcd_bak.c
字号:
#ifndef __KERNEL__#define __KERNEL__#endif#ifndef MODULE#define MODULE#endif/*powerpc-linux-gcc -O2 -D_KERNEL_ -DMODULE -I/usr/src/power-linux/include\-c hello_lcd.c\-o /tftpboot/powerpc-rootfs/tmp/hello_lcd.o*/#include <linux/ioport.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/proc_fs.h>#include <linux/delay.h>#include <asm/uaccess.h>#include <asm/io.h>#include <asm/8xx_immap.h>#define MODULE_VERSION "1.0"#define MODULE_NAME "hello_lcd"volatile immap_t *immap;static void *io_base;#define MAJOR_NUM 200#define EXPANSIONPORT 0x80000000#define EXPANSIONPORTLEN 16void signal_handler1(void);void signal_handler2(void);void signal_handler1(void){udelay(10);writeb(0x00,io_base+0x17);udelay(1);writeb(0x02,io_base+0x17);udelay(1);writeb(0x00,io_base+0x17);udelay(40);printk("data transfered!\n");}void signal_handler2(void){udelay(10);writeb(0x01,io_base+0x17);udelay(1);writeb(0x03,io_base+0x17);udelay(1);writeb(0x01,io_base+0x17);udelay(40); printk("data transfered!\n");}static int __init init_module(void){ immap=(immap_t *)(mfspr(IMMR)&0xFFFF0000); immap->im_memctl.memc_br7=0x80000401; immap->im_memctl.memc_or7=0x80000FF6; io_base=ioremap_nocache(EXPANSIONPORT,EXPANSIONPORTLEN); printk("io_base =0x%08x\n",io_base); writeb(0xff,io_base+0x1B);udelay(15); /*set 8 bit mode*/signal_handler1();udelay(4);signal_handler1(); /*set 8 bit mode*/ udelay(1); /*set 8 mode*/signal_handler1(); writeb(0x0C,io_base+0x1D); /*set 8bit mode ,font ,matrix*/signal_handler1();writeb(0x10,io_base+0x1D); /*close*/signal_handler1();writeb(0x70,io_base+0x1D); /*open*/signal_handler1();writeb(0x60,io_base+0x1D);/*set display on,cursor move right,shift right*/signal_handler1();writeb(0x80,io_base+0x1D); /*clear screen*/signal_handler1();udelay(1000);writeb(0x12,io_base+0x1D); /*display a char*/signal_handler2();writeb(0xA6,io_base+0x1D); /*display a char*/signal_handler2();writeb(0x36,io_base+0x1D); /*display a char*/signal_handler2();writeb(0x36,io_base+0x1D); /*display a char*/signal_handler2();writeb(0xF6,io_base+0x1D); /*display a char*/signal_handler2();printk("immr =0x%08x\n",immap);printk("io_base=0x%08x\n",io_base);printk(" BR7 =0x%08x\n",immap->im_memctl.memc_br7);printk(" or7 =0x%08x\n",immap->im_memctl.memc_or7);printk(KERN_INFO "%s %s initialized\n",MODULE_NAME,MODULE_VERSION);return 0;}static void __exit cleanup_module(void){writeb(0x80,io_base+0x1D);signal_handler1();writeb(0x00,io_base+0x1B);/*iorelease the ioremap*/iounmap(io_base);printk(KERN_INFO "%s %s removed\n",MODULE_NAME,MODULE_VERSION);}MODULE_AUTHOR("A0317170 gxguo");MODULE_DESCRIPTION("hello_lcd");EXPORT_NO_SYMBOLS;/*static int device_open(struct inode *inode,struct file *file){/*to implement the open_file operation mod_buffer=kmalloc(BUFFER_SIZE,GFP_KERNEL);MOD_INC_USE_COUNT;}int device_release(struct inode *inode,struct file *file){ kfree(mod_buffer); MOD_DEC_USE_COUNT; return 0;}ssize_t device_read(struct file *file,char *buffer,size_t length,loff_t *offset){if (offset>=BUFFER_SIZE){return 0;}if ((offset+length)>BUFFER_SIZE) return 0;else copy_to_user(buffer,mod_buffer+offset,length);}ssize_t device_write(struct file *file,const char *buffer,size_t length, loff_t *offset)int len;/*deal with buffer length he/copy_from_user(mod_buffer,buffer,length);}int device_ioctl(struct inode *inode, struct file *file, unsigned int ioctl_num, unsigned long ioctl_param){switch(ioctl_num) { case xxxx: break; default: break; } return 0;}int main(){ /*initialize the variableint fd;fd=open("/dev/dev_name",O_RDWR);nbyte=write(fd,buffer,BUFFER_SIZE);/*other function///close(fd);//}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -