Changeset 700eaa9 in mainline for tools/mkfat.py
- Timestamp:
- 2008-10-26T17:26:17Z (17 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 23b56ca
- Parents:
- f772105e
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tools/mkfat.py
rf772105e r700eaa9 35 35 import random 36 36 import xstruct 37 38 def align_up(size, alignment): 39 "Return size aligned up to alignment" 40 41 if (size % alignment == 0): 42 return size 43 44 return (((size / alignment) + 1) * alignment) 45 46 def subtree_size(root, cluster_size): 47 "Recursive directory walk and calculate size" 48 49 size = 0 50 files = 0 51 52 for name in os.listdir(root): 53 canon = os.path.join(root, name) 54 55 if (os.path.isfile(canon)): 56 size += align_up(os.path.getsize(canon), cluster_size) 57 files += 1 58 59 if (os.path.isdir(canon)): 60 size += subtree_size(canon, cluster_size) 61 files += 1 62 63 return size + align_up(files * 32, cluster_size) 64 65 def root_entries(root): 66 "Return number of root directory entries" 67 68 return len(os.listdir(root)) 37 69 38 70 BOOT_SECTOR = """little: … … 77 109 return 78 110 111 sector_size = 512 112 cluster_size = 4096 113 114 root_size = align_up(root_entries(sys.argv[1]) * 32, sector_size) 115 size = subtree_size(sys.argv[1], cluster_size) 116 fat_size = align_up(size / cluster_size * 2, sector_size) 117 118 sectors = (cluster_size + 2 * fat_size + root_size + size) / sector_size 119 79 120 outf = file(sys.argv[2], "w") 80 121 … … 82 123 boot_sector.jmp = [0xEB, 0x3C, 0x90] 83 124 boot_sector.oem = "MSDOS5.0" 84 boot_sector.sector = 51285 boot_sector.cluster = 8 # 4096 bytes per cluster86 boot_sector.reserved = 1125 boot_sector.sector = sector_size 126 boot_sector.cluster = cluster_size / sector_size 127 boot_sector.reserved = cluster_size / sector_size 87 128 boot_sector.fats = 2 88 boot_sector.rootdir = 224 # FIXME: root directory should be sector aligned89 boot_sector.sectors = 0 # FIXME129 boot_sector.rootdir = root_size / 32 130 boot_sector.sectors = (sectors if (sectors <= 65535) else 0) 90 131 boot_sector.descriptor = 0xF8 91 boot_sector.fat_sectors = 0 # FIXME92 boot_sector.track_sectors = 0 # FIXME93 boot_sector.heads = 0 # FIXME132 boot_sector.fat_sectors = fat_size / sector_size 133 boot_sector.track_sectors = 63 134 boot_sector.heads = 6 94 135 boot_sector.hidden = 0 95 boot_sector.sectors_big = 0 # FIXME136 boot_sector.sectors_big = (sectors if (sectors > 65535) else 0) 96 137 97 boot_sector.drive = 0 138 boot_sector.drive = 0x80 98 139 boot_sector.extboot_signature = 0x29 99 140 boot_sector.serial = random.randint(0, 0xFFFFFFFF)
Note:
See TracChangeset
for help on using the changeset viewer.