A ver, estoy haciendo un device driver que saque A's
El programa es este:
/*----------------------------------*/
/*INCLUDES */
/*----------------------------------*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/types.h> /*size t*/
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/errno.h>
#include <linux/proc_fs.h>
#include <linux/fcntl.h>
#include <asm/system.h>
#include <asm/uaccess.h>
/*----------------------------------*/
/*DECLARACION DE FUNCIONES DEL BUFFER*/
/*----------------------------------*/
int bufferg4_open(struct inode *inode, struct file *filp);
int bufferg4_release(struct inode *inode, struct file *filp);
ssize_t bufferg4_read(struct file *filp, char *buf, size_t count, loff_t *f_pos);
void cleanup_module(void);
/*----------------------------------*/
/*Estructura de operaciones*/
/*----------------------------------*/
struct file_operations bufferg4_fops = {
read:bufferg4_read,
write:NULL,
open:bufferg4_open,
release:bufferg4_release
};
/*----------------------------------*/
/*Variables Globales del driver*/
/*----------------------------------*/
int memoria_major = 60;
char *aa;
/*----------------------------------*/
/*modulo */
/*----------------------------------*/
int init_module(void){
int result;
unsigned char xxx;
result=register_chrdev(memoria_major, "bufferg4", &bufferg4_fops);
if (result<0){
printk("<1>No puc obtenir un numero mes gran %d\n", memoria_major);
}
/*inicializar las letras a*/
aa=kmalloc(64, GFP_KERNEL);
xxx='a';
memset(aa,xxx,64);
return result;
}
void cleanup_module(void) {
unregister_chrdev(memoria_major, "bufferg4");
kfree(aa);
}
int bufferg4_open(struct inode *inode, struct file *filp){
return 0;
}
int bufferg4_release(struct inode *inode, struct file *filp){
return 0;
}
ssize_t bufferg4_read(struct file *filp, char *buf, size_t count, loff_t *f_pos) {
copy_to_user(buf,aa,1);
return 0;
}
El problema es que cuando uso el programa, me saca simbolos raros en vez de las a que tocaria y no se donde huevos puede estar el fallo, a ver si podeis echarme una mano porque me voy a tirar del puente jajaja
#include <stdio.h>
#include <string.h>
#include <unistd.h>
int main() {
unsigned char g4_buffer[64];
unsigned char dummy;
FILE *filebuffer;
/*aquí abro el modulo anterior que con mknod le dado bufferg4*/
filebuffer=fopen("/dev/bufferg4","r");
/*leo y coloco en g4_buffer 1 caracter*/
fread(g4_buffer,sizeof(char),1,filebuffer);
/*escribir la a*/
printf("\n mostramos 3 a: %s", g4_buffer);
fclose(filebuffer);
}
PD: Gracias, código identado y arreglado.