JZ4770 bootloader에서 nand에 대한 파티션을 나누고 있습니다.
다음은 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 。
~
~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.