Title: ?? : Dummy ???? ???? ?? ? ??
1?? ???? ????
2??
- ?? ??
- ?? ??
- ?? ?? ?? ??
- ??? ???? ????
- ?? Dummy ???? ???? ?? ? ??
3kernel configuration
- ?? kernel ??? ?? ???
- MTD file system? mount?? ?? ???
4system type
5Serial drivers
- Device drivers -gt Character devices -gt Serial
drivers
6Boot options
7MTD
- Device drivers -gt Memory Technology Devices (MTD)
-gt
8MTD
- Device drivers -gt Memory Technology Devices (MTD)
-gt - Ram/Rom/Flash chip drivers
9MTD
- Device drivers -gt Memory Technology Devices (MTD)
-gt - Mapping drivers for chip access
10File systems
- File systems -gt Miscellaneous filesystems -gt
11?? ??
- ??? ?? ?? ???? loading ? ? ?? ?? ????
- ??? ?? ??? ??? ??? ??? ? ?? ?? ??? ???? ???? ??
?? - ???? ????, ?? ???, ???? ???? ?? ??? ???
- ???? ?? ?? ??? ???? ??, ?? ???? ?? ?? ??? ???? ?
- ltlinux/module.hgt? ???? ??
- ?? ??? ?? ???? ??? ???? ?
- ?? ?? ?????? ???
- main() ??? ??
- ??? ?? ? ?? ? ? ???? ??? ??
- Loading ? - int init_module(void) ?? ??
- Unloading ? - void cleanup_module() ?? ??
12?? ?? ?? ??
- Hello World ????
- ??? ??? ?
- Hello world ??
- ??? ??? ?
- Goodbye world ??
- / hello.c /
- include ltlinux/module.hgt / ?? ??? ?? /
- include ltlinux/kernel.hgt / printk() ?? ?? /
- int hello_init(void) // ??? ??? ? ??
- printk (Hello world\n)
- return 0
-
- void hello_exit(void) // ?? ? ? ??
- printk (Goodbye world)
-
- module_init(hello_init)
- module_exit(hello_exit)
- MODULE_LICENSE(GPL)
13?? ?? ?? ???
- arm-linux-gcc ????? ??
- ???? ?? Makefile ??
- Makefile
- obj-m hello.o
-
- KDIR (?? ??? ??? ?? ??)
- PWD (shell pwd)
-
- all
- (MAKE) -C (KDIR) SUBDIRS(PWD) modules
-
- clean
- rm -rf .ko
- rm -rf .mod.
- rm -rf ..cmd
- rm -rf .o
14?? ?? ?? ?? ??
- ??? ??? ??
- rx hello.ko
- ??? ??(x??)? ?? ???? ???? ko ?? ??
- insmod hello.ko
- ??? ??? ?? ?? ??
- lsmod
- ?? ??
- rmmod hello
- ?? ??? ?? ?? ?? ???? ????? ???? ? ??
15??? ???? ????
- ?? ?? ??? ??? ?? ??? ????? ???? ?????? ?? ?????
??? ? ??? ??? ???? - ???? ??? ??? ???? ????? ??? ???? ??? ????? ???
- ????? ?? ??? ??? ???? ??? ????? ??
- ???? ???? ????? ??? ???? ?
- ?? ??? ?? ??? ??
16??? ???? ????? ??
- ?? ???? ????
- ??? ???? ?? ??
- ????? ???? ??? ??? ??
- ?) ???, ??? ?? ?
- ?? ???? ????
- ?? ??? ??? ???
- ?????? ??? ?? ???? ??
- ????? ???? ??? ??? ??? ??
- ?) ?? ???, CD?, ??? ??? ?
- ???? ???? ????
- ???? ????? ??
- ???????? ??? ?? ?? ????? ? ?? socket(), bind() ??
??? ? ??
17??? ???? ????? ??(2)
18???? ?? ??
- ????? ??? ??? ???
- ls l /dev ??? ???? ?? ??
???? ??
???
???
19???? ?? ??(2)
- ? ??(Major Number)
- ???? ???? ????? ??/????? ??
- ?? Device? ??? ??, 1Byte (0255??? ?)
- ? ??(Minor Number)
- ???? ???? ??? ??? ???? ?? ??
- ? Device? ???? ??? ???, 2Byte (???)
- ??? ???? ????? ?? ?? ???? ?? ??
???
???
20?? ???? ???? ?? ??
include ltlinux/kernel.hgt include ltlinux/module.hgt include ltlinux/init.hgt
int device_open( ) int device_release( ) ssize_t device_write( ) ssize_t device_read( )
static struct file_operations device_fops ssize_t (read) () ssize_t (write) () int (open) () int (release) ()
int init_module(void) void cleanup_module(void)
module_init(hello_init) module_exit(hello_exit)
?? ??
?? ?? ?? ??
?? ?? ???
21???? ???? ?? ??
- ???? ???? ??
- ????? ??? ????, ?? ??? ???? ?? ??? ?? ??? ??
- insmod? ???? ??? ??? ??? ? init???? ??? ??
- ?? ???? ?? ??
- ??? ???? ?? chrdevs ??? ??? ?? ???? ??
- major number ???, 0? ?? ???? ?? ?? ??
- name ???? ???? /proc/devices? ???
- fops ????? ??? ?? ?? ??? ???
- ??? ???? ??? ????? ???
int register_chrdev( unsigned int major, const
name, struct file_operations fops)
22???? ???? ?? ??(2)
- ???? ???? ??
- rmmod ???? ????? ??? ? cleanup ???? ??
- ?? ???? ?? ??
int unregister_chrdev( unsigned int major, const
name)
23???? ???? ?? ??(3)
- ?? ?? ??? ??
- ???? ????? ???? ??? ??? ?????? ???? ??
- ? ????? ?? ??? ????, ??? ?? ??? ???? I/O ???
????? ????? ?? - ???? ????? ????? ?? ???? ???? ????? ???? ????
????? ??? ?? ??
struct file_operations dummy_fops .owner
THIS_MODULE, .open dummy_open, .read
dummy_read, .write dummy_write,
.ioctl dummy_ioctl .release
dummy_release,
24???? ???? ?? ??(4)
- ?? ??? ??
- read
- ?????? ???? ???? ??? ??
- write
- ????? ???? ?? ??? ??
- ioctl
- ????? ???? ??? ??? ?? ??
- mmap
- ???? ???? ???? ???? ??
- open
- ????? ? ? ??
- release
- ????? ?? ? ??
25?? Dummy ???? ???? ??
include ltlinux/module.hgt include
ltlinux/kernel.hgt include ltlinux/fs.hgt include
ltlinux/errno.hgt include ltlinux/types.hgt include
ltlinux/fcntl.hgt define DUMMY_NAME
dummy define DUMMY_MAJOR_NUMBER 240
26?? Dummy ???? ???? ??(2)
static int dummy_init(void) int
ret printk(dummy init\n)
ret register_chrdev(DUMMY_MAJOR_NUMBER,
DUMMY_NAME, dummy_fops) if
(res lt 0) return
ret return 0 module_init(dummy_init)
27?? Dummy ???? ???? ??(3)
static void dummy_exit(void)
printk(dummy exit\n) unregist
er_chrdev( DUMMY_MAJOR_NUMBER,
DUMMY_NAME) module_exit(dummy_exit)
MODULE_LICENSE(GPL)
28?? Dummy ???? ???? ??(4)
struct file_operations dummy_fops .owner
THIS_MODULE, .open dummy_open, .read
dummy_read, .write dummy_write,
.ioctl dummy_ioctl, .release
dummy_release,
29?? Dummy ???? ???? ??(5)
int dummy_open(struct inode inode, struct file
filep) int num MINOR(inode-gti_rdev)
printk(dummy dev open -gt minor d\n,
num) return 0 int
dummy_release(struct inode inode, struct file
filep) printk(dummy dev
close\n) return 0
30?? Dummy ???? ???? ??(6)
size_t dummy_read(struct file filep, char buf,
size_t count, loff_t f_pos) printk(du
mmy dev read -gt buf 0x08x, count 0x08x\n, buf,
count) return 0x33 size_t
dummy_write(struct file filep, const char buf,
size_t count, loff_t f_pos)
printk(dummy dev write -gt buf 0x08x,
count 0x08x\n, buf, count) return
0x43
31?? Dummy ???? ???? ??(7)
int dummy_ioctl(struct inode inode, struct file
filep, unsigned int cmd, unsigned long
arg) printk(dummy dev ioctl -gt cmd
0x08x, arg 0x08x\n, cmd, arg) return
0x53
32?? Dummy ????? ???? ?? ?????? ??
include ltstdio.hgt include ltsys/types.hgt include
ltsys/stat.hgt include ltsys/ioctl.hgt include
ltfcntl.hgt include ltunistd.hgt define DEV_NAME
/dev/dummy_device int main() int
dev char buf128 int
ret printf(1gt device
open\n) dev open(DEV_NAME,
O_RDWRO_NDELAY) printf(dev
d\n, dev) if (dev gt 0)
printf(2gt read
function\n) ret read(dev,
0x30, 0x31) printf(ret
0xx08x\n, ret) printf(3gt
write function\n) ret
write(dev, 0x40, 0x41) printf(re
t 0xx08x\n, ret) printf(4gt
ioctl function\n) ret
ioctl(dev, 0x51, 0x52) printf(re
t 0xx08x\n, printf(5gt
device close\n) ret
close(dev) printf(ret
0xx08x\n, ret) return 0
33?? ???? ???? ?? ? ??
- ???? ???? ???
- ?? ?? ??? ??
- ???? ???? ??
- insmod dummy.ko
- ?? ??
- ????? ???? ???? ??(??)? ???? ?
- ??(??)? ??? ??? ??
- mknod /dev/dummy_device c 240 0
- ???? ???? ??
- rmmod dummy
- ????? ?? ??
- lsmod