인턴사원 주간 OJT 실습발표 임베디드 시스템의 구성 / 역할 리눅스 ...

Click here to load reader

download 인턴사원 주간  OJT  실습발표 임베디드  시스템의 구성  /  역할 리눅스  디바이스 드라이버 작성 실습

of 14

description

인턴사원 주간 OJT 실습발표 임베디드 시스템의 구성 / 역할 리눅스 디바이스 드라이버 작성 실습. SW 팀 김정섭. 발 표 목 록 부트로더 루트 파일시스템 커 널 디바이스 드라이버 / 작성실습 결 론 / 보완사항 . 부트로더. 부트로더 란 운영 체제가 시동되기 이전에 미리 실행되면서 커널이 올바르게 시동되기 위해 필요한 모든 관련 작업을 마무리하고 최종적으로 운영체제를 시동시키기 위한 목적 을 가진 프로그램을 말한다 . - PowerPoint PPT Presentation

Transcript of 인턴사원 주간 OJT 실습발표 임베디드 시스템의 구성 / 역할 리눅스 ...

PowerPoint

OJT

/ SW

/

/

.

(Master Boot Sector, MBR) ,

1.

2. == ( ) .

LILO, GRUB, U-bootU-boot?Universal Bootloader PPC ARM .PPC, ARM, MIPS, SH, x86 CPU , .

(RFS) . / . , ,

init . Init . init .

, . .

#mkdir -p /tmp/ramdisk0 // (tmp) #mkfs -t ext2 /dev/ram0 // (mkfs) #mount /dev/ram0/tmp/ramdisk0 // "/tmp/ramdisk0" .

. 3.7.5 .

, ,

,

(VFS, Virtual File System) ,

,

, ,LCD, H / W

HW

READ WRITE data stream Ex)

Disk block read / write ex) hard disk, CD ROM driver, floppy disk

network frame Ex) ethernet device driver

,

.

( )

Major number() / Device

Minor number() Device

.

#mknod /dev/drive_file_name c

, .

make module_name.ko insmod .

#insmod module_name.ko #lsmod rmmod module_name .ko !8 Insmod#define DEVICE_FILENAME /dev/calldev

rmmod Struct file_operations xxx_fop=

{ open : xxx_open, read : xxx_read, write : xxx_write, ioctl : xxx_ioctl, release : xxx_release,}; //Module_exit(xxx_exit)xxx_exit(){ unregister_chdrv()};Module_init(xxx_init)xxx_init(){ register_chdrv()};chrdevs[MAX_PROBE_HASH]

Struct file_opreations *fops;Write()Ioctl()Close()Open()/dev/calldevInsmod .rmmod . chrdevs file_operations chrdevs fops . . chrdevs .9#include #include #include #include #include #include #include /* main() .*/#define CALL_DEV_NAME "calldev // #define CALL_DEV_MAJOR 240//

int call_open(struct inode *inode, struct file *flip) { // open() /dev/calldev file operation int num = MINOR(inode->i_rdev); //MINOR() : kdev_t minor number printk("call open -> minor : %d\n",num); //printk() #dmesg return 0; // 0 }

loff_t call_llseek(struct file *flip, loff_t off, int whence) { lseek(dev, 0x20, SEEK_SET) call_llseek() . -1 .

printk("call llseek->off:%08X, whence %08X\n",off, whence); return 0x23;}

ssize_t call_read(struct file *flip, char *buf, size_t count, loff_t *f_pos) {

// read(dev,0x30,0x31) call_read() .// , printk("call read->buf : %08X, count : %08X\n",buf,count); return 0x33; // .}

ssize_t call_write(struct file *flip, char *buf, size_t count, loff_t *f_pos){//write()// write(dev,0x40,0x41) call_write() .// , // buf read() 0x40 count read() 0x40 .printk("call write -> buf : %08x, count : %08x\n",buf,count); return 0x43; }

int call_ioctl(struct inode *inode, struct file *flip, unsigned int cmd, unsigned long arg) { printk("call ioctl -> cmd : %08x, arg : %08x\n",cmd,arg); return 0x53;}

int call_release (struct inode *inode, struct file *flip){// close() release( ) .printk("call release\n"); return 0;}struct file_operations call_fops=/* struct file_operations char device driver . . open driver call_open() mapping .*/{.owner = THIS_MODULE, //.llseek = call_llseek,.read = call_read,.write = call_write,.unlocked_ioctl = call_ioctl, .open = call_open,.release = call_release,};

int call_init(void) // register char() {int result;

printk("call call_init\n");

result = register_chrdev(CALL_DEV_MAJOR, CALL_DEV_NAME, &call_fops); if (result