슈퍼블록 객체를 알아보자. 참고로 ext4 파일시스템이다.
iput(
(struct list_head) s_list = ((struct list_head *) next = 0xE0E79000 // 슈퍼 블록 리스트. 이 주소를 통해서 다른 파일 시스템의 슈퍼 블록에 접근을 할 수 있을 것 같다.
(dev_t) s_dev = 271581186 = 0x10300002 = '.0..', // 식별자임
(unsigned char) s_dirt = 0 = 0x0 = '.',
(unsigned char) s_blocksize_bits = 12 = 0x0C = '.' // 비트 단위의 블록 크기: 12, 즉 0x0C 비트를 left shift 연산 해야 블락 사이즈(단위는 바이트)를 얻을 수 있음
(long unsigned int) s_blocksize = 4096 = 0x1000 = '....',// 바이트 단위의 블록 크기
(loff_t) s_maxbytes = 2199023251456 = 0x000001FFFFFFF000, // 최대 파일 크기
(struct file_system_type *) s_type = 0xC0CAAD6C = ext4_fs_type -> ((char *) name = 0xC0A297FC = -> "ext4", // 파일 시스템 유형
(struct super_operations *) s_op = 0xC084E890 = // 슈퍼블록 함수
(struct dquot_operations *) dq_op = 0x0 = -> NULL, // 사용량 제한 함수
(struct quotactl_ops *) s_qcop = 0x0 = -> NULL, // 사용량 제어 함수
(struct export_operations *) s_export_op = 0xC084E9B0 = // 파일 시스템 외부 제공 함수
(long unsigned int) s_flags = 1879113728 = 0x70010000 = 'p...', // 마운트 플래그
(long unsigned int) s_magic = 61267 = 0xEF53 = '...S', // 파일 시스템 고유 번호
(struct dentry *) s_root = 0xE09153C0 = // 디렉토리 마운트 지점
(struct rw_semaphore) s_umount = // 마운트 해제용 세마포어
(struct mutex) s_lock = // 슈퍼 블락 세마포어
(int) s_count = 1 = 0x1 = '....', // 슈퍼블록 참조 횟수
(atomic_t) s_active = ((int) counter = 2 = 0x2 = '....'),
(void *) s_security = 0xDFEC2B80 = __bss_stop+0x1F00C160 -> ,
(struct xattr_handler * *) s_xattr = // 확장 속성 핸들러
(struct list_head) s_inodes = ((struct list_head *) next // 아이노드 리스트
(struct hlist_bl_head) s_anon = ((struct hlist_bl_node *) first = 0x0 = -> NULL), //익명 디렉토리 항목
(struct list_head *) s_files = 0xC0C30ABC = irq_desc[54].depth // 할당된 파일 리스트
(struct list_head) s_mounts = ((struct list_head *) next = 0xE76E4A74 = __bss_stop+0x2682E054 -> ((struct list_head *) next = 0xDFEA6574 = __bss_stop+0x1EFEFB54
(struct list_head) s_dentry_lru = ((struct list_head *) next = 0xE7025864 = // 미사용 덴트리 항목 리스트
(int) s_nr_dentry_unused = 963 = 0x03C3 = '....',
(spinlock_t) s_inode_lru_lock = ((struct raw_spinlock) rlock = ((arch_spinlock_t) raw_lock = ((unsigned int) lock = 0 = 0x0 = '....'), (unsigned int) break_lock
(struct list_head) s_inode_lru = ((struct list_head *) next = 0xE0E798C8 =
(int) s_nr_inodes_unused = 0 = 0x0 = '....',
(struct block_device *) s_bdev = 0xE08FFC80 = //관련 블록 디바이스
(struct backing_dev_info *) s_bdi = 0xE600B3D8 = __bss_stop+0x251549B8 -> ((struct list_head) bdi_list = ((struct list_head *) next = 0xE600AF40 = __bss_stop+0x
(struct mtd_info *) s_mtd = 0x0 = -> NULL, // 메모리 디스크 정보
(struct hlist_node) s_instances = ((struct hlist_node *) next = 0xE76F5CE0 // 같은 파일 시스템 인스턴스
(struct quota_info) s_dquot = ((unsigned int) flags = 0 //사용량 제한 옵션
(int) s_frozen = 0 = 0x0 = '....', // 동결 상태
(wait_queue_head_t) s_wait_unfrozen = // 동결 상태에 있는 웨이트 큐
(char [32]) s_id = "mmcblk0p18", // 이름 문자열
(u8 [16]) s_uuid = "W.....e_.g.o...[",
(void *) s_fs_info = 0xE0E79C00 = // 파일 시스템 관련 정보
(unsigned int) s_max_links = 0 = 0x0 = '....',
(fmode_t) s_mode = 131 = 0x83 = '....',
(u32) s_time_gran = 1 = 0x1 = '....', //타임 스탬프 정밀도
(struct mutex) s_vfs_rename_mutex = ((atomic_t) count = ((int) counter = 1 = 0x1 = '....'), (spinlock_t) wait_lock = ((struct raw_spinlock) rlock = ((arch_spinl
(char *) s_subtype = 0x0 = -> NULL,// 하부 유형 이름
(char *) s_options = 0x0 = -> NULL, // 저장된 마운트 옵션
(struct list_head) s_list = ((struct list_head *) next = 0xE0E79000 // 슈퍼 블록 리스트. 이 주소를 통해서 다른 파일 시스템의 슈퍼 블록에 접근을 할 수 있을 것 같다.
(dev_t) s_dev = 271581186 = 0x10300002 = '.0..', // 식별자임
(unsigned char) s_dirt = 0 = 0x0 = '.',
(unsigned char) s_blocksize_bits = 12 = 0x0C = '.' // 비트 단위의 블록 크기: 12, 즉 0x0C 비트를 left shift 연산 해야 블락 사이즈(단위는 바이트)를 얻을 수 있음
(long unsigned int) s_blocksize = 4096 = 0x1000 = '....',// 바이트 단위의 블록 크기
(loff_t) s_maxbytes = 2199023251456 = 0x000001FFFFFFF000, // 최대 파일 크기
(struct file_system_type *) s_type = 0xC0CAAD6C = ext4_fs_type -> ((char *) name = 0xC0A297FC = -> "ext4", // 파일 시스템 유형
(struct super_operations *) s_op = 0xC084E890 = // 슈퍼블록 함수
(struct dquot_operations *) dq_op = 0x0 = -> NULL, // 사용량 제한 함수
(struct quotactl_ops *) s_qcop = 0x0 = -> NULL, // 사용량 제어 함수
(struct export_operations *) s_export_op = 0xC084E9B0 = // 파일 시스템 외부 제공 함수
(long unsigned int) s_flags = 1879113728 = 0x70010000 = 'p...', // 마운트 플래그
(long unsigned int) s_magic = 61267 = 0xEF53 = '...S', // 파일 시스템 고유 번호
(struct dentry *) s_root = 0xE09153C0 = // 디렉토리 마운트 지점
(struct rw_semaphore) s_umount = // 마운트 해제용 세마포어
(struct mutex) s_lock = // 슈퍼 블락 세마포어
(int) s_count = 1 = 0x1 = '....', // 슈퍼블록 참조 횟수
(atomic_t) s_active = ((int) counter = 2 = 0x2 = '....'),
(void *) s_security = 0xDFEC2B80 = __bss_stop+0x1F00C160 -> ,
(struct xattr_handler * *) s_xattr = // 확장 속성 핸들러
(struct list_head) s_inodes = ((struct list_head *) next // 아이노드 리스트
(struct hlist_bl_head) s_anon = ((struct hlist_bl_node *) first = 0x0 = -> NULL), //익명 디렉토리 항목
(struct list_head *) s_files = 0xC0C30ABC = irq_desc[54].depth // 할당된 파일 리스트
(struct list_head) s_mounts = ((struct list_head *) next = 0xE76E4A74 = __bss_stop+0x2682E054 -> ((struct list_head *) next = 0xDFEA6574 = __bss_stop+0x1EFEFB54
(struct list_head) s_dentry_lru = ((struct list_head *) next = 0xE7025864 = // 미사용 덴트리 항목 리스트
(int) s_nr_dentry_unused = 963 = 0x03C3 = '....',
(spinlock_t) s_inode_lru_lock = ((struct raw_spinlock) rlock = ((arch_spinlock_t) raw_lock = ((unsigned int) lock = 0 = 0x0 = '....'), (unsigned int) break_lock
(struct list_head) s_inode_lru = ((struct list_head *) next = 0xE0E798C8 =
(int) s_nr_inodes_unused = 0 = 0x0 = '....',
(struct block_device *) s_bdev = 0xE08FFC80 = //관련 블록 디바이스
(struct backing_dev_info *) s_bdi = 0xE600B3D8 = __bss_stop+0x251549B8 -> ((struct list_head) bdi_list = ((struct list_head *) next = 0xE600AF40 = __bss_stop+0x
(struct mtd_info *) s_mtd = 0x0 = -> NULL, // 메모리 디스크 정보
(struct hlist_node) s_instances = ((struct hlist_node *) next = 0xE76F5CE0 // 같은 파일 시스템 인스턴스
(struct quota_info) s_dquot = ((unsigned int) flags = 0 //사용량 제한 옵션
(int) s_frozen = 0 = 0x0 = '....', // 동결 상태
(wait_queue_head_t) s_wait_unfrozen = // 동결 상태에 있는 웨이트 큐
(char [32]) s_id = "mmcblk0p18", // 이름 문자열
(u8 [16]) s_uuid = "W.....e_.g.o...[",
(void *) s_fs_info = 0xE0E79C00 = // 파일 시스템 관련 정보
(unsigned int) s_max_links = 0 = 0x0 = '....',
(fmode_t) s_mode = 131 = 0x83 = '....',
(u32) s_time_gran = 1 = 0x1 = '....', //타임 스탬프 정밀도
(struct mutex) s_vfs_rename_mutex = ((atomic_t) count = ((int) counter = 1 = 0x1 = '....'), (spinlock_t) wait_lock = ((struct raw_spinlock) rlock = ((arch_spinl
(char *) s_subtype = 0x0 = -> NULL,// 하부 유형 이름
(char *) s_options = 0x0 = -> NULL, // 저장된 마운트 옵션
(struct super_operations *) s_op = 0xC084E890 = ext4_sops -> (
(struct inode * (*)()) alloc_inode = 0xC01F72D4 = ext4_alloc_inode -> ,
(void (*)()) destroy_inode = 0xC0203074 = ext4_destroy_inode -> ,
(void (*)()) dirty_inode = 0xC01EC7B0 = ext4_dirty_inode -> ,
(int (*)()) write_inode = 0xC01E7D9C = ext4_write_inode -> ,
(int (*)()) drop_inode = 0xC01FDFDC = ext4_drop_inode -> ,
(void (*)()) evict_inode = 0xC01EC2F0 = ext4_evict_inode -> ,
(void (*)()) put_super = 0xC0204038 = ext4_put_super -> ,
(void (*)()) write_super = 0x0 = -> NULL,
(int (*)()) sync_fs = 0xC01F71B8 = ext4_sync_fs -> ,
(int (*)()) freeze_fs = 0xC0202F28 = ext4_freeze -> ,
(int (*)()) unfreeze_fs = 0xC0202ED0 = ext4_unfreeze -> ,
(int (*)()) statfs = 0xC01F68A0 = ext4_statfs -> ,
(int (*)()) remount_fs = 0xC02049A0 = ext4_remount -> ,
(void (*)()) umount_begin = 0x0 = -> NULL,
(int (*)()) show_options = 0xC01F7110 = ext4_show_options -> ,
(int (*)()) show_devname = 0x0 = -> NULL,
(int (*)()) show_path = 0x0 = -> NULL,
(int (*)()) show_stats = 0x0 = -> NULL,
(int (*)()) bdev_try_to_free_page = 0xC01F6B64 = bdev_try_to_free_page -> ,
(int (*)()) nr_cached_objects = 0x0 = -> NULL,
(void (*)()) free_cached_objects = 0x0 = -> NULL),
(struct dquot_operations *) dq_op = 0x0 = -> NULL,
(struct quotactl_ops *) s_qcop = 0x0 = -> NULL,
(struct inode * (*)()) alloc_inode = 0xC01F72D4 = ext4_alloc_inode -> ,
(void (*)()) destroy_inode = 0xC0203074 = ext4_destroy_inode -> ,
(void (*)()) dirty_inode = 0xC01EC7B0 = ext4_dirty_inode -> ,
(int (*)()) write_inode = 0xC01E7D9C = ext4_write_inode -> ,
(int (*)()) drop_inode = 0xC01FDFDC = ext4_drop_inode -> ,
(void (*)()) evict_inode = 0xC01EC2F0 = ext4_evict_inode -> ,
(void (*)()) put_super = 0xC0204038 = ext4_put_super -> ,
(void (*)()) write_super = 0x0 = -> NULL,
(int (*)()) sync_fs = 0xC01F71B8 = ext4_sync_fs -> ,
(int (*)()) freeze_fs = 0xC0202F28 = ext4_freeze -> ,
(int (*)()) unfreeze_fs = 0xC0202ED0 = ext4_unfreeze -> ,
(int (*)()) statfs = 0xC01F68A0 = ext4_statfs -> ,
(int (*)()) remount_fs = 0xC02049A0 = ext4_remount -> ,
(void (*)()) umount_begin = 0x0 = -> NULL,
(int (*)()) show_options = 0xC01F7110 = ext4_show_options -> ,
(int (*)()) show_devname = 0x0 = -> NULL,
(int (*)()) show_path = 0x0 = -> NULL,
(int (*)()) show_stats = 0x0 = -> NULL,
(int (*)()) bdev_try_to_free_page = 0xC01F6B64 = bdev_try_to_free_page -> ,
(int (*)()) nr_cached_objects = 0x0 = -> NULL,
(void (*)()) free_cached_objects = 0x0 = -> NULL),
(struct dquot_operations *) dq_op = 0x0 = -> NULL,
(struct quotactl_ops *) s_qcop = 0x0 = -> NULL,
(struct dentry *) s_root = 0xE09153C0 = __bss_stop+0x1FA5E9A0 -> (
(unsigned int) d_flags = 0 = 0x0 = '....',
(seqcount_t) d_seq = ((unsigned int) sequence = 2 = 0x2 = '....'),
(struct hlist_bl_node) d_hash = ((struct hlist_bl_node *) next = 0x0 = -> NULL, (struct hlist_bl_node * *) pprev = 0x0 = -> NULL),
(struct dentry *) d_parent = 0xE09153C0 = __bss_stop+0x1FA5E9A0 -> ((unsigned int) d_flags = 0 = 0x0 = '....', (seqcount_t) d_seq = ((unsigned int) sequence =
(struct qstr) d_name = ((unsigned int) hash = 0 = 0x0 = '....', (unsigned int) len = 1 = 0x1 = '....', (unsigned char *) name = 0xE09153E4 = __bss_stop+0x1FA5
(struct inode *) d_inode = 0xE0930D40 = __bss_stop+0x1FA7A320 -> ((umode_t) i_mode = 16889 = 0x41F9 = 'A.', (short unsigned int) i_opflags = 7 = 0x7 = '..', (
(unsigned char [36]) d_iname = "/",
(unsigned int) d_count = 42 = 0x2A = '...*',
(spinlock_t) d_lock = ((struct raw_spinlock) rlock = ((arch_spinlock_t) raw_lock = ((unsigned int) lock = 0 = 0x0 = '....'), (unsigned int) break_lock = 0 = 0
(struct dentry_operations *) d_op = 0x0 = -> NULL,
(struct super_block *) d_sb = 0xE0E79800 = __bss_stop+0x1FFC2DE0 -> ((struct list_head) s_list = ((struct list_head *) next = 0xE0E79000 = __bss_stop+0x1FFC25
(long unsigned int) d_time = 0 = 0x0 = '....',
(void *) d_fsdata = 0x0 = -> NULL,
(struct list_head) d_lru = ((struct list_head *) next = 0xE0915424 = __bss_stop+0x1FA5EA04 -> ((struct list_head *) next = 0xE0915424 = __bss_stop+0x1FA5EA04,
(union) d_u = ((struct list_head) d_child = ((struct list_head *) next = 0xE091542C = __bss_stop+0x1FA5EA0C -> ((struct list_head *) next = 0xE091542C = __bss
(struct list_head) d_subdirs = ((struct list_head *) next = 0xE0997B9C = __bss_stop+0x1FAE117C -> ((struct list_head *) next = 0xE0AD28F4 = __bss_stop+0x1FC1B
(struct list_head) d_alias = ((struct list_head *) next = 0xE0930DEC = __bss_stop+0x1FA7A3CC -> ((struct list_head *) next = 0xE091543C = __bss_stop+0x1FA5EA1
(unsigned int) d_flags = 0 = 0x0 = '....',
(seqcount_t) d_seq = ((unsigned int) sequence = 2 = 0x2 = '....'),
(struct hlist_bl_node) d_hash = ((struct hlist_bl_node *) next = 0x0 = -> NULL, (struct hlist_bl_node * *) pprev = 0x0 = -> NULL),
(struct dentry *) d_parent = 0xE09153C0 = __bss_stop+0x1FA5E9A0 -> ((unsigned int) d_flags = 0 = 0x0 = '....', (seqcount_t) d_seq = ((unsigned int) sequence =
(struct qstr) d_name = ((unsigned int) hash = 0 = 0x0 = '....', (unsigned int) len = 1 = 0x1 = '....', (unsigned char *) name = 0xE09153E4 = __bss_stop+0x1FA5
(struct inode *) d_inode = 0xE0930D40 = __bss_stop+0x1FA7A320 -> ((umode_t) i_mode = 16889 = 0x41F9 = 'A.', (short unsigned int) i_opflags = 7 = 0x7 = '..', (
(unsigned char [36]) d_iname = "/",
(unsigned int) d_count = 42 = 0x2A = '...*',
(spinlock_t) d_lock = ((struct raw_spinlock) rlock = ((arch_spinlock_t) raw_lock = ((unsigned int) lock = 0 = 0x0 = '....'), (unsigned int) break_lock = 0 = 0
(struct dentry_operations *) d_op = 0x0 = -> NULL,
(struct super_block *) d_sb = 0xE0E79800 = __bss_stop+0x1FFC2DE0 -> ((struct list_head) s_list = ((struct list_head *) next = 0xE0E79000 = __bss_stop+0x1FFC25
(long unsigned int) d_time = 0 = 0x0 = '....',
(void *) d_fsdata = 0x0 = -> NULL,
(struct list_head) d_lru = ((struct list_head *) next = 0xE0915424 = __bss_stop+0x1FA5EA04 -> ((struct list_head *) next = 0xE0915424 = __bss_stop+0x1FA5EA04,
(union) d_u = ((struct list_head) d_child = ((struct list_head *) next = 0xE091542C = __bss_stop+0x1FA5EA0C -> ((struct list_head *) next = 0xE091542C = __bss
(struct list_head) d_subdirs = ((struct list_head *) next = 0xE0997B9C = __bss_stop+0x1FAE117C -> ((struct list_head *) next = 0xE0AD28F4 = __bss_stop+0x1FC1B
(struct list_head) d_alias = ((struct list_head *) next = 0xE0930DEC = __bss_stop+0x1FA7A3CC -> ((struct list_head *) next = 0xE091543C = __bss_stop+0x1FA5EA1
'Core BSP 분석 > 리눅스 커널 핵심 분석' 카테고리의 다른 글
아이노드 오퍼레이션 - ext4 파일 시스템 (0) | 2023.05.05 |
---|---|
덴트리를 통해 시스템 콜 파일 패스 알아내기 (0) | 2023.05.05 |
덴트리 캐시 (0) | 2023.05.05 |
GPIO - 리눅스 커널 (0) | 2023.05.05 |
wakelock - 안드로이드 (0) | 2023.05.05 |