--- linux/kernel/chr_drv/mem.c 2018/04/24 18:08:20 1.1.1.1 +++ linux/kernel/chr_drv/mem.c 2018/04/24 18:11:51 1.1.1.3 @@ -154,6 +154,17 @@ static int write_port(struct inode * ino return tmp-buf; } +static int read_zero(struct inode *node,struct file *file,char *buf,int count) +{ + int left; + + for (left = count; left > 0; left--) { + put_fs_byte(0,buf); + buf++; + } + return count; +} + /* * The memory devices use the full 32 bits of the offset, and so we cannot * check against negative addresses: they are ok. The return value is weird, @@ -192,6 +203,8 @@ static int mem_read(struct inode * inode return 0; /* /dev/null */ case 4: return read_port(inode,file,buf,count); + case 5: + return read_zero(inode,file,buf,count); default: return -ENODEV; } @@ -210,6 +223,8 @@ static int mem_write(struct inode * inod return count; /* /dev/null */ case 4: return write_port(inode,file,buf,count); + case 5: + return count; /* /dev/zero */ default: return -ENODEV; } @@ -226,9 +241,10 @@ static struct file_operations mem_fops = NULL /* no special release code */ }; -void chr_dev_init(void) +long chr_dev_init(long mem_start, long mem_end) { chrdev_fops[1] = &mem_fops; - tty_init(); - lp_init(); + mem_start = tty_init(mem_start); + mem_start = lp_init(mem_start); + return mem_start; }