JZ4770 bootloader에서 nand에 대한 파티션을 나누고 있습니다.

5809 단어
Android 시스템에는 여러 개의 파티션이 있습니다.시스템, 데이터, 플래시 등
다음은 jz4770 플랫폼에서 어떤 장치의 구역 정보입니다.
/dev/block/mmcblk0p1/system ext4 rw,relatime,user_xattr,barrier=1,data=ordered 0 0/dev/block/mmcblk0p2/data ext4 rw,nosuid,nodev,relatime,user_xattr,barrier=1,nodelalloc,data=ordered,noauto_da_alloc 0 0/dev/block/mmcblk0p3/cache ext4 rw,nosuid,nodev,relatime,user_xattr,barrier=1,data=ordered 0 0/dev/block/vold/179:4/mnt/flash vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0002,dmask=0002,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortn0/dev/block/vold/179:4/mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,relatime,uid=1000,gid=1015,fmask=0002,dmask=0002,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,0 tmpfs/mnt/flash/.android_secure tmpfs ro,relatime,size=0k,mode=000 0 0
여기서/dev/block/mmcblk0은 보드의 Nandflash를 나타냅니다.현재 시스템의 nand 크기는 4G입니다.위에 bootloader,kernel,안드로이드 시스템 등이 설치되어 있다
그 중에서 bootloader,kernel은 Nand의 시작으로 구역을 나누지 않고 mmcblk0을 직접 누드적으로 썼다.뒤에 있는 mmcblk0p1~mmcblk0p4는 mmcblk0에 있는 4개의 구역입니다. 그 중에서
mmcblk0p1이 구역을 나누었을 때, 처음의bootloader,kernel 데이터 구역을 건너뛰었습니다.
이 네 개의 구역의 구역 정보를 완성한 후에 mbr에 쓰십시오.bin의 512바이트 파일에 있습니다.이것은 메인 가이드 기록을 대표하며 디스크/미디어의 구역 정보를 기록합니다.그리고 이 512바이트를 bootloader에 넣을 거예요.
시작점.bootloader가 nand에 녹음된 후에 섹션 테이블이 만들어집니다.
다음은 코드를 보겠습니다.
Makefile
 157 MBR:  158         gcc  spl/tools/mbr_creater/mbr_creater.c -o spl/tools/mbr_creater/mbr_creater -I$(TOPDIR) -I$(TOPDIR)/include  159         spl/tools/mbr_creater/mbr_creater mbr.bin
컴파일할 때 mbr를 만듭니다.bin 파일
그리고 나서
 152 mbr-xboot.bin:  $(MSC_SPL) MBR $(MBR_XBOOT_DEPEND)  153         $(MAKE) -C spl pad  154         cat spl/msc-spl-pad.bin $(X_BOOT2) > x-boot-msc.bin  155         cat mbr.bin x-boot-msc.bin > mbr-xboot.bin
이 512바이트의 파일을 bootloader의 맨 위에 놓으십시오.파티션을 완료할 수 있습니다.
다음은 mbrcreater 코드
10 
 11 int main(int argc,char *argv[])
 12 {
 13     int fd;
 14 
 15     uint32_t p1,ps1;
 16     uint32_t p2,ps2;
 17     uint32_t p3,ps3;
 18     uint64_t p4,ps4;
 19 
 20     uint8_t pt1,pt2,pt3,pt4;
 21     uint8_t block[512];
 22 
 23     if(argc != 2)
 24     {
 25         printf("usage: %s filename.
",argv[0]); 26 exit(0); 27 } 28 29 p1=p2=p3=p4=0; 30 ps1=ps2=ps3=ps4=0; 31 pt1=pt2=pt3=pt4=0; 32 33 memset(block,0,512); 34 #ifdef MBR_P1_OFFSET 35 p1 = MBR_P1_OFFSET; 36 #endif 37 #ifdef MBR_P1_SIZE 38 ps1 = MBR_P1_SIZE; 39 #endif 40 #ifdef MBR_P1_TYPE 41 pt1 = MBR_P1_TYPE; 42 #endif 43 ///////////////////////////////////////////////// 44 #ifdef MBR_P2_OFFSET 45 p2 = MBR_P2_OFFSET; 46 #endif 47 #ifdef MBR_P2_SIZE 48 ps2 = MBR_P2_SIZE; 49 #endif 50 #ifdef MBR_P2_TYPE 51 pt2 = MBR_P2_TYPE; 52 #endif 53 ///////////////////////////////////////////////// 54 #ifdef MBR_P3_OFFSET 55 p3 = MBR_P3_OFFSET; 56 #endif 57 #ifdef MBR_P3_SIZE 58 ps3 = MBR_P3_SIZE; 59 #endif 60 #ifdef MBR_P3_TYPE 61 pt3 = MBR_P3_TYPE; 62 #endif 63 ///////////////////////////////////////////////// 64 #ifdef MBR_P4_OFFSET 65 p4 = MBR_P4_OFFSET; 66 #endif 67 #ifdef MBR_P4_SIZE 68 ps4 = MBR_P4_SIZE; 69 #endif 70 #ifdef MBR_P4_TYPE 71 pt4 = MBR_P4_TYPE; 72 #endif 73 ///////////////////////////////////////////////// 74 block[0x1fe] = 0x55; 75 block[0x1ff] = 0xaa; 76 77 p1 /= 512; 78 p2 /= 512; 79 p3 /= 512; 80 p4 /= 512; 81 82 ps1 /= 512; 83 ps2 /= 512; 84 ps3 /= 512; 85 ps4 /= 512; 86 87 memcpy(block+0x1c6,&p1,sizeof(uint32_t)); 88 memcpy(block+0x1d6,&p2,sizeof(uint32_t)); 89 memcpy(block+0x1e6,&p3,sizeof(uint32_t)); 90 memcpy(block+0x1f6,&p4,sizeof(uint32_t)); 91 92 memcpy(block+0x1ca,&ps1,sizeof(uint32_t)); 93 memcpy(block+0x1da,&ps2,sizeof(uint32_t)); 94 memcpy(block+0x1ea,&ps3,sizeof(uint32_t)); 95 memcpy(block+0x1fa,&ps4,sizeof(uint32_t)); 96 97 memcpy(block+0x1c2,&pt1,sizeof(uint8_t)); 98 memcpy(block+0x1d2,&pt2,sizeof(uint8_t)); 99 memcpy(block+0x1e2,&pt3,sizeof(uint8_t)); 100 memcpy(block+0x1f2,&pt4,sizeof(uint8_t)); 101 ///////////////////////////////////////////////// 102 103 fd = open(argv[1],O_RDWR | O_TRUNC | O_CREAT,0777); 104 if(fd < 0) 105 { 106 printf("open %s failed.
",argv[1]); 107 exit(1); 108 } 109 110 write(fd,block,512); 111 112 close(fd); 113 return 0; 114 } 115 , 4 , , , mbr 。 ~ ~

좋은 웹페이지 즐겨찾기