免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6362 | 回复: 13
打印 上一主题 下一主题

[文件系统] 给大家介绍一种方法调试文件系统 [复制链接]

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-14 22:36 |只看该作者 |倒序浏览
本帖最后由 amarant 于 2012-11-14 22:39 编辑

先建立一个img
dd if=/dev/zero of=./busybox.img bs=1M count=50
给该镜像分区
fdisk busybox.img
用n命令新建分区,注意建立两个分区,一个分区做/目录,一个分区供自己调查跟踪
  1. zh@PC:~/work/linux$ sudo fdisk busybox.img
  2. Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
  3. Building a new DOS disklabel with disk identifier 0x09997232.
  4. Changes will remain in memory only, until you decide to write them.
  5. After that, of course, the previous content won't be recoverable.

  6. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

  7. Command (m for help): n
  8. Partition type:
  9.    p   primary (0 primary, 0 extended, 4 free)
  10.    e   extended
  11. Select (default p): p
  12. Partition number (1-4, default 1):
  13. Using default value 1
  14. First sector (2048-102399, default 2048):
  15. Using default value 2048
  16. Last sector, +sectors or +size{K,M,G} (2048-102399, default 102399): 20M
  17. Value out of range.
  18. Last sector, +sectors or +size{K,M,G} (2048-102399, default 102399): 20m
  19. Value out of range.
  20. Last sector, +sectors or +size{K,M,G} (2048-102399, default 102399): +20M

  21. Command (m for help): n
  22. Partition type:
  23.    p   primary (1 primary, 0 extended, 3 free)
  24.    e   extended
  25. Select (default p): p
  26. Partition number (1-4, default 2):
  27. Using default value 2
  28. First sector (43008-102399, default 43008):
  29. Using default value 43008
  30. Last sector, +sectors or +size{K,M,G} (43008-102399, default 102399):
  31. Using default value 102399

  32. Command (m for help): w
  33. The partition table has been altered!

  34. Syncing disks.
复制代码
然后用kpartx工具给这两个分区创建文件系统:
  1. zh@PC:~/work/linux$ sudo kpartx -av busybox.img
  2. add map loop1p1 (252:0): 0 40960 linear /dev/loop1 2048
  3. add map loop1p2 (252:1): 0 59392 linear /dev/loop1 43008
复制代码
  1. zh@PC:~/work/linux$ sudo mkfs.ext2 /dev/mapper/loop1p1
  2. mke2fs 1.42 (29-Nov-2011)
  3. Discarding device blocks: done                           
  4. Filesystem label=
  5. OS type: Linux
  6. Block size=1024 (log=0)
  7. Fragment size=1024 (log=0)
  8. Stride=0 blocks, Stripe width=0 blocks
  9. 5136 inodes, 20480 blocks
  10. 1024 blocks (5.00%) reserved for the super user
  11. First data block=1
  12. Maximum filesystem blocks=20971520
  13. 3 block groups
  14. 8192 blocks per group, 8192 fragments per group
  15. 1712 inodes per group
  16. Superblock backups stored on blocks:
  17.         8193

  18. Allocating group tables: done                           
  19. Writing inode tables: done                           
  20. Writing superblocks and filesystem accounting information: done

  21. zh@PC:~/work/linux$ sudo mkfs.ext2 /dev/mapper/loop1p2
  22. mke2fs 1.42 (29-Nov-2011)
  23. Discarding device blocks: done                           
  24. Filesystem label=
  25. OS type: Linux
  26. Block size=1024 (log=0)
  27. Fragment size=1024 (log=0)
  28. Stride=0 blocks, Stripe width=0 blocks
  29. 7424 inodes, 29696 blocks
  30. 1484 blocks (5.00%) reserved for the super user
  31. First data block=1
  32. Maximum filesystem blocks=30408704
  33. 4 block groups
  34. 8192 blocks per group, 8192 fragments per group
  35. 1856 inodes per group
  36. Superblock backups stored on blocks:
  37.         8193, 24577

  38. Allocating group tables: done                           
  39. Writing inode tables: done                           
  40. Writing superblocks and filesystem accounting information: done
复制代码
这一步,看看上面的命令,大家就都懂了。
关于用busybox跑起来内核估计就不用我介绍了。

跑起来内核以后,可以直接通过dd if=/dev/sda2 of=file bs=? count=? seek=? 来读指定快的内容。观察其数据在磁盘中存的状态。

有网友就会有疑问了,那為什麼要用两个分区呢。一个分区不也可以吗?
如果一个分区的话,那么根目录下太多的文件就会造成干扰,让我们无法知道哪些数据是我们留下的,哪些数据是根目录里本来就有的。

先写到这,有时间再补充

论坛徽章:
1
水瓶座
日期:2013-09-28 21:40:25
2 [报告]
发表于 2012-11-14 22:50 |只看该作者
loop device 是个好东西。
http://wiki.osdev.org/Loopback_Device

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
3 [报告]
发表于 2012-11-15 07:59 |只看该作者
回复 1# amarant
多谢分享

   

论坛徽章:
16
2015亚冠之吉达阿赫利
日期:2015-08-17 11:21:462015年迎新春徽章
日期:2015-03-04 09:58:11酉鸡
日期:2014-12-07 09:06:19水瓶座
日期:2014-11-04 14:23:29天秤座
日期:2014-03-02 08:57:52双鱼座
日期:2014-02-22 13:07:56午马
日期:2014-02-14 11:08:18双鱼座
日期:2014-02-13 11:09:37卯兔
日期:2014-02-06 15:10:34子鼠
日期:2014-01-20 14:48:19戌狗
日期:2013-12-19 09:37:46射手座
日期:2013-12-19 09:33:47
4 [报告]
发表于 2012-11-15 09:17 |只看该作者
感谢分享

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
5 [报告]
发表于 2012-11-15 13:58 |只看该作者
fallocate disk.img -l 128M
sudo losetup /dev/loop0 disk.img
sudo fdisk /dev/loop0
sudo mkfs -t ext2 /dev/loop0
sudo mount /dev/loop0 /mnt

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
6 [报告]
发表于 2012-11-15 20:19 |只看该作者
回复 5# tempname2


    呵呵,我主要是不想只有一个分区

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
7 [报告]
发表于 2012-11-15 20:47 |只看该作者
今天继续
如果用qemu模拟器跑起来内核

接着昨天的,创建好了分区后,就可以通过
mount /dev/mapper/loop1p2 /mnt
挂载好分区。
busybox代码可以从网上获取,编译也很简单,make menuconfig
配置上交叉工具链,选上静态编译(static)
直接make
成功后,就把当前目录下的_install 全部拷贝到/mnt下
cp -rf _install/* /mnt
然后在/mnt下创建dev文件夹:
  1. cd /mnt
  2. mkdir dev
  3. cp /dev/tty[0-4] dev/ -af
  4. cp /dev/tty /dev/ -af
  5. mkdir etc/init.d
  6. touch etc/init.d/rcS
  7. chmod +x etc/init.d/rcS
复制代码
busybox基本就这样就可以了

现在再说说内核的配置,内核的配置大家都很熟了吧,make menuconfig 选选选,make就可以了
我这里用的是mips的内核,我用的是malta_defconfig,然后配置成64位的mips
写了一个简单脚本
  1. #!/bin/bash

  2. export ARCH=mips
  3. export CROSS_COMPILE=mips64el-unknown-linux-gnu-
  4. if [ "X$1" != "XX" ]; then
  5. make -j8
  6. fi

  7. if [ $? -eq 0 ]; then
  8.   ${CROSS_COMPILE}objdump -D vmlinux > vmlinux.hex
  9.   ../qemu-build/mips64el-softmmu/qemu-system-mips64el -M malta -kernel vmlinux -nographic -cpu 5kc -hda busybox.img -append 'root=/dev/hda1'
  10. else
  11. echo "Make error!"
  12. fi
复制代码
不出意外就可以跑完了

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
8 [报告]
发表于 2012-11-15 20:49 |只看该作者
这里是完整的log:
  1. zh@PC:~/work/linux$ ../qemu-build/mips64el-softmmu/qemu-system-mips64el -M malta -kernel vmlinux -nographic -cpu 5kc -hda busybox.img -append 'root=/dev/hda1'
  2. Linux version 3.7.0-rc5-00014-g9924a19 (zh@PC) (gcc version 4.6.0 (GCC for Cross-LFS 4.6.0.20110517) ) #19 SMP Thu Nov 15 20:36:09 CST 2012
  3. Config serial console: console=ttyS0,38400n8r
  4. bootconsole [early0] enabled
  5. CPU revision is: 00018100 (MIPS 5Kc)
  6. Checking for the multiply/shift bug... no.
  7. Checking for the daddiu bug... no.
  8. Determined physical RAM map:
  9. memory: 0000000000001000 @ 0000000000000000 (reserved)
  10. memory: 00000000000ef000 @ 0000000000001000 (ROM data)
  11. memory: 0000000000534000 @ 00000000000f0000 (reserved)
  12. memory: 00000000079dc000 @ 0000000000624000 (usable)
  13. Wasting 88032 bytes for tracking 1572 unused pages
  14. Zone ranges:
  15.   DMA      [mem 0x00000000-0x00ffffff]
  16.   Normal   [mem 0x01000000-0x07ffffff]
  17. Movable zone start for each node
  18. Early memory node ranges
  19.   node   0: [mem 0x00000000-0x07ffffff]
  20. Primary instruction cache 8kB, VIPT, 2-way, linesize 32 bytes.
  21. Primary data cache 8kB, 2-way, VIPT, no aliases, linesize 32 bytes
  22. PERCPU: Embedded 10 pages/cpu @98000000011c3000 s9728 r8192 d23040 u40960
  23. Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32320
  24. Kernel command line: root=/dev/hda1 console=ttyS0,38400n8r
  25. PID hash table entries: 512 (order: 0, 4096 bytes)
  26. Dentry cache hash table entries: 16384 (order: 5, 131072 bytes)
  27. Inode-cache hash table entries: 8192 (order: 4, 65536 bytes)
  28. __ex_table already sorted, skipping sort
  29. Cache parity protection disabled
  30. Memory: 122736k/124784k available (3746k kernel code, 2048k reserved, 1117k data, 252k init, 0k highmem)
  31. Hierarchical RCU implementation.
  32.         CONFIG_RCU_FANOUT set to non-default value of 32
  33.         RCU restricting CPUs from NR_CPUS=2 to nr_cpu_ids=1.
  34. NR_IRQS:256
  35. CPU frequency 200.00 MHz
  36. Console: colour dummy device 80x25
  37. Calibrating delay loop... 944.53 BogoMIPS (lpj=4722688)
  38. pid_max: default: 32768 minimum: 301
  39. Mount-cache hash table entries: 256
  40. Checking for the daddi bug... no.
  41. Brought up 1 CPUs
  42. NET: Registered protocol family 16
  43. bio: create slab <bio-0> at 0
  44. vgaarb: loaded
  45. PCI host bridge to bus 0000:00
  46. pci_bus 0000:00: root bus resource [mem 0x10000000-0x17ffffff]
  47. pci_bus 0000:00: root bus resource [io  0x2000-0x1fffff]
  48. pci_bus 0000:00: No busn resource found for root bus, will use [bus 00-ff]
  49. pci 0000:00:0a.3: no compatible bridge window for [io  0x1100-0x110f]
  50. vgaarb: device added: PCI:0000:00:12.0,decodes=io+mem,owns=none,locks=none
  51. pci 0000:00:0a.3: BAR 8: [io  0x1100-0x110f] has bogus alignment
  52. pci 0000:00:12.0: BAR 0: assigned [mem 0x10000000-0x11ffffff pref]
  53. pci 0000:00:0b.0: BAR 6: assigned [mem 0x12000000-0x1200ffff pref]
  54. pci 0000:00:12.0: BAR 6: assigned [mem 0x12010000-0x1201ffff pref]
  55. pci 0000:00:12.0: BAR 1: assigned [mem 0x12020000-0x12020fff]
  56. pci 0000:00:0a.2: BAR 4: assigned [io  0x2000-0x201f]
  57. pci 0000:00:0b.0: BAR 0: assigned [io  0x2020-0x203f]
  58. pci 0000:00:0b.0: BAR 1: assigned [mem 0x12021000-0x1202101f]
  59. pci 0000:00:0a.1: BAR 4: assigned [io  0x2040-0x204f]
  60. Switching to clocksource MIPS
  61. NET: Registered protocol family 2
  62. TCP established hash table entries: 4096 (order: 4, 65536 bytes)
  63. TCP bind hash table entries: 4096 (order: 4, 65536 bytes)
  64. TCP: Hash tables configured (established 4096 bind 4096)
  65. TCP: reno registered
  66. UDP hash table entries: 256 (order: 1, 8192 bytes)
  67. UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
  68. NET: Registered protocol family 1
  69. RPC: Registered named UNIX socket transport module.
  70. RPC: Registered udp transport module.
  71. RPC: Registered tcp transport module.
  72. RPC: Registered tcp NFSv4.1 backchannel transport module.
  73. PCI: Enabling device 0000:00:0a.2 (0000 -> 0001)
  74. VFS: Disk quotas dquot_6.5.2
  75. Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
  76. Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
  77. msgmni has been set to 239
  78. Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
  79. io scheduler noop registered
  80. io scheduler deadline registered
  81. io scheduler cfq registered (default)
  82. PCI: Enabling device 0000:00:12.0 (0000 -> 0002)
  83. cirrusfb 0000:00:12.0: Cirrus Logic chipset on PCI bus, RAM (4096 kB) at 0x10000000
  84. Console: switching to colour frame buffer device 80x30
  85. Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
  86. serial8250.0: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
  87. console [ttyS0] enabled, bootconsole disabled
  88. console [ttyS0] enabled, bootconsole disabled
  89. serial8250.0: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
  90. serial8250.0: ttyS2 at MMIO 0x1f000900 (irq = 18) is a 16550A
  91. brd: module loaded
  92. Uniform Multi-Platform E-IDE driver
  93. piix 0000:00:0a.1: IDE controller (0x8086:0x7111 rev 0x00)
  94. PCI: Enabling device 0000:00:0a.1 (0000 -> 0001)
  95. piix 0000:00:0a.1: not 100% native mode: will probe irqs later
  96.     ide0: BM-DMA at 0x2040-0x2047
  97.     ide1: BM-DMA at 0x2048-0x204f
  98. hda: QEMU HARDDISK, ATA DISK drive
  99. hda: UDMA/33 mode selected
  100. hdc: QEMU DVD-ROM, ATAPI CD/DVD-ROM drive
  101. hdc: UDMA/33 mode selected
  102. ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
  103. ide1 at 0x170-0x177,0x376 on irq 15
  104. ide_generic: please use "probe_mask=0x3f" module parameter for probing all legacy ISA IDE ports
  105. ide-gd driver 1.18
  106. hda: max request size: 512KiB
  107. hda: 102400 sectors (52 MB) w/256KiB Cache, CHS=101/255/63
  108. hda: cache flushes supported
  109. hda: hda1 hda2
  110. ide-cd driver 5.00
  111. ide-cd: hdc: ATAPI 4X DVD-ROM drive, 512kB Cache
  112. cdrom: Uniform CD-ROM driver Revision: 3.20
  113. physmap platform flash device: 00400000 at 1e000000
  114. pflash_write: Unimplemented flash cmd sequence (offset 0000000000000000, wcycle 0x0 cmd 0x0 value 0xf000f0)
  115. physmap-flash.0: Found 1 x32 devices at 0x0 in 32-bit bank. Manufacturer ID 0x000000 Chip ID 0x000000
  116. Intel/Sharp Extended Query Table at 0x0031
  117. pflash_write: Unimplemented flash cmd sequence (offset 0000000000000000, wcycle 0x0 cmd 0x0 value 0xf0)
  118. Using buffer write method
  119. Creating 3 MTD partitions on "physmap-flash.0":
  120. 0x000000000000-0x000000100000 : "YAMON"
  121. 0x000000100000-0x0000003e0000 : "User FS"
  122. 0x0000003e0000-0x000000400000 : "Board Config"
  123. pcnet32: pcnet32.c:v1.35 21.Apr.2008 tsbogend@alpha.franken.de
  124. PCI: Enabling device 0000:00:0b.0 (0000 -> 0003)
  125. pcnet32: PCnet/PCI II 79C970A at 0x2020, 52:54:00:12:34:56 assigned IRQ 10
  126. pcnet32: eth0: registered as PCnet/PCI II 79C970A
  127. pcnet32: 1 cards_found
  128. mousedev: PS/2 mouse device common for all mice
  129. rtc_cmos rtc_cmos: rtc core: registered rtc_cmos as rtc0
  130. rtc0: alarms up to one day, 242 bytes nvram
  131. TCP: cubic registered
  132. NET: Registered protocol family 17
  133. NET: Registered protocol family 15
  134. rtc_cmos rtc_cmos: setting system clock to 2012-11-15 12:48:40 UTC (1352983720)
  135. VFS: Mounted root (ext2 filesystem) readonly on device 3:1.
  136. Freeing prom memory: 956k freed
  137. Freeing unused kernel memory: 252k freed
  138. Algorithmics/MIPS FPU Emulator v1.5

  139. Please press Enter to activate this console.
  140. / # ls
  141. bin         dev         etc         init        lost+found  sbin
  142. / #
复制代码

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
9 [报告]
发表于 2012-11-15 20:50 |只看该作者
qemu的代码可以在网上下载,编译的步骤也很简单
./configure
make

也可通过configure选定只编译选定的目标
./configure --target-list=mips64el-softmmu
make

可能会少一些库,少了什么安装上就可以了。

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
10 [报告]
发表于 2012-11-15 21:33 |只看该作者
本帖最后由 amarant 于 2012-11-19 21:43 编辑

关于cpu以及架构,如果你没有一种比较熟悉的,建议使用openrisc,这个处理器非常简单。如果了解一个处理器的指令集以及异常处理等一些原理。发生kernel panic的时候,可以比较快定位原因。关于处理器以及环境就介绍这么多了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP