2013-05-21 8 views
4

내가 Linux Kernel Module Programming 가이드를 미끄러 져 있다고 말할 때, 호출되는,하지만 알아낼 수 없습니다 :어떤 커널 모듈 기능이 나는 "고양이 myfile을>는/dev/sda를은"

내가 cat image.iso > /dev/sda을 말할 때, 그 원인을 것입니다 sda 장치 드라이버에서 write 기능을 file_operations structure으로 실행해야합니까? 또는 파일 인터페이스가 장치 노드를 차단하는 데 적용되지 않았습니까?

해당 기능의 구현은 어디에서 찾을 수 있습니까? (Linux code tree 내의 각 드라이버)?

+3

시스템이 'strace' 유틸리티로 명령 사용을 호출하는 것을 볼 수 있습니다. 예 : 'strace 고양이 이미지 .iso>/dev/sda'. 필요한 종류의 정보입니까? – lgeorget

+7

@lgeorget jftr strace가 호출되기 전에 리디렉션이 일어나기 때문에 모든 정보가 표시되지 않으므로 strace -f sh -c 'cat image.iso>/dev/sda''와 같은 것이어야합니다 –

+0

ups 예, 고쳐 주셔서 감사합니다. – lgeorget

답변

0

fs/block-dev.c는 블록 장치에 적용 할 수있는 파일 작업 및 주소 공간 작업을 정의합니다.

static const struct address_space_operations def_blk_aops = { 
    .readpage  = blkdev_readpage, 
    .writepage  = blkdev_writepage, 
    .write_begin = blkdev_write_begin, 
    .write_end  = blkdev_write_end, 
    .writepages  = generic_writepages, 
    .releasepage = blkdev_releasepage, 
    .direct_IO  = blkdev_direct_IO, 
    .is_dirty_writeback = buffer_check_dirty_writeback, 
}; 

const struct file_operations def_blk_fops = { 
    .open   = blkdev_open, 
    .release  = blkdev_close, 
    .llseek   = block_llseek, 
    .read   = do_sync_read, 
    .write   = do_sync_write, 
    .aio_read  = blkdev_aio_read, 
    .aio_write  = blkdev_aio_write, 
    .mmap   = generic_file_mmap, 
    .fsync   = blkdev_fsync, 
    .unlocked_ioctl = block_ioctl, 
#ifdef CONFIG_COMPAT 
    .compat_ioctl = compat_blkdev_ioctl, 
#endif 
    .splice_read = generic_file_splice_read, 
    .splice_write = generic_file_splice_write, 
};