7장에서 이미지 메이커 프로그램이 복잡해서 파이썬으로 만들어 봄.
import sys import struct def createDiskImage(): fDiskImage = open('../../Disk.img', "wb+") return fDiskImage def readBootLoader(fDiskImage): fBootLoader = open('../../00.BootLoader/BootLoader.bin', 'rb') # get size of bootloader fBootLoader.seek(0, 2) sizeOfBootLoader = fBootLoader.tell() # reset file descriptor fBootLoader.seek(0) # set fDiskImage as stdout fDiskImage.write(fBootLoader.read()) # padding = struct.pack('b', 0) * (sizeOfBootLoader % 512) if ( sizeOfBootLoader % 512 ) != 0 : padding = (b'\x00') * (sizeOfBootLoader % 512) fDiskImage.write(padding) fBootLoader.close() def readKernel32(fDiskImage): fKernel32 = open('../../01.Kernel32/Kernel32.bin', 'rb') fKernel32.seek(0, 2) sizeOfKernel32 = fKernel32.tell() fKernel32.seek(0) fDiskImage.write(fKernel32.read()) if ( sizeOfKernel32 % 512 ) != 0 : for i in range(512 - (sizeOfKernel32 % 512)): fDiskImage.write(b'\x00') sizeOfKernel32 += (512 - (sizeOfKernel32 % 512)) fKernel32.close() return (sizeOfKernel32 // 512) if __name__ == "__main__": fDiskImage = createDiskImage() readBootLoader(fDiskImage) sectorNumber = readKernel32(fDiskImage) print ("Sector Number :", sectorNumber) fDiskImage.seek(5); fDiskImage.write(struct.pack('b', sectorNumber)) fDiskImage.close()
참조 -
http://kybin.github.com/translateDiveIntoPython3korean/table-of-contents.html#native-datatypes (다이브인투파이썬3)
http://ddiri01.tistory.com/78 (struct, pack)
http://pracon.tistory.com/131 (struct, pack)
http://pracon.tistory.com/130 (file I/O)
http://thdev.net/225 (파싱)
http://www.ibm.com/developerworks/kr/library/l-python3-1/ (IBM 문서, 파이썬3 새로운 기능)
http://devsw.tistory.com/20 (간단한 파이썬 튜토리얼)
'CLKH64 OS > 07장' 카테고리의 다른 글
7장 대략적인 설명 (2) | 2013.01.07 |
---|---|
Makefile (1) | 2013.01.01 |
링커스크립트 (0) | 2013.01.01 |