📄 hpi.c
字号:
#include "hpi.h"
int fdrv_open(struct inode *inode, struct file *filp);
int fdrv_release(struct inode *inode, struct file *filp) ;
ssize_t fdrv_write(struct file *filp, const int *buf, size_t count, loff_t *offp) ;
ssize_t fdrv_read(struct file *filp, int *buf, size_t count, loff_t *offp) ;
int fdrv_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long addr);
loff_t fdrv_seek(struct file *filp,loff_t off, int whence);
struct file_operations fdrv_fops=
{
owner: THIS_MODULE,
read: fdrv_read,
write: fdrv_write,
open: fdrv_open,
release: fdrv_release,
llseek: fdrv_seek,
ioctl: fdrv_ioctl,
};
loff_t fdrv_seek(struct file *filp,loff_t off, int whence) {
hpi_RegAddr_temp = hpi_RegAddr + off/4; return hpi_RegAddr_temp;
}
int fdrv_open(struct inode *inode, struct file *filp)
{
MOD_INC_USE_COUNT;
return 0;
}
int fdrv_release(struct inode *inode, struct file *filp)
{
MOD_DEC_USE_COUNT;
return 0;
}
ssize_t fdrv_write(struct file *filp, const int *buf, size_t count, loff_t *offp)
{
int i,temp;
temp = hpi_RegAddr_temp; for(i=0;i<count;i++){
*(hpi_RegAddr_temp++)= *(buf++);
}
hpi_RegAddr_temp=temp;
return count;
}
ssize_t fdrv_read(struct file *filp, int *buf, size_t count, loff_t *offp)
{
int i,temp;
temp = hpi_RegAddr_temp; for(i=0;i<count;i++){
*(buf++)= *(hpi_RegAddr_temp++);
}
hpi_RegAddr_temp=temp;
return count;
}
int fdrv_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long addr)
{
return -EINVAL;
}
static int __init init_hpi(void)
{
AT91_SYS->EBI_SMC2_CSR[7] = 0x22003488;
//-----------------------------------------------------------------------------------------------------------------
if (!request_mem_region(HPI_PHYSICAL_REG_ADDR,HPI_PHYSICAL_REG_SIZE, "HPI_DRIVER"))
printk("Error request mem \n");
hpi_RegAddr = (unsigned int*) ioremap_nocache(HPI_PHYSICAL_REG_ADDR,HPI_PHYSICAL_REG_SIZE);
printk("HPI:Phys Reg address:%X \n", hpi_RegAddr);
if (!hpi_RegAddr)
printk("HPI_init: ioremap() returned NULL\n");
//-----------------------------------------------------------------------------------------------------------------
register_chrdev(MAJOR_NUM, "HPI", &fdrv_fops);
printk("hpi device installed.\n");
return 0;
}
//void cleanup_module( void )
static void __exit exit_hpi(void)
{
printk("HPI device uninstalled.\n");
}
module_init(init_hpi);
module_exit(exit_hpi);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -