嵌入式linux的flash分区

2019-07-12 15:24发布

这两天玩了下开发板,装了个android系统,2.3.3的系统。 但是装软件只能装到文件系统,所谓的内部空间中,但这板子的File System仅有120M,装完系统就用去了90M,省下的空间装不了几个软件就没空间了,于是研究怎么扩大的办法。   先尝试在sd卡上建了个文件夹,删除了/data/app并将app以符号链接方式指向/sdcard/app,但似乎因权限什么的问题没搞定   在启动记录中看到了 S3C NAND Driver is using hardware ECC.
NAND device: Manufacturer ID: 0xec, Chip ID: 0xd5 (Samsung NAND 2GiB 3,3V 8-bit)
Creating 4 MTD partitions on "NAND 2GiB 3,3V 8-bit":
0x000000000000-0x000000100000 : "Bootloader"
0x000000100000-0x000000600000 : "Kernel"
0x000000600000-0x000007e00000 : "User"
0x000007e00000-0x000080000000 : "File System"
的字样,开始还以为这是boot中指定的,在boot代码中搜啊搜的就是搜不到。   看了看上下文,这都已经是内核在启动了,肯定是内核中指定的。上述的user就是6M-126M,即120M的空间。而File System的大小则是余下的近2G的空间了, busybox df看了下,其实这第三块并没有挂载上。按我的理解,User跟File System实际该换一下名字, 其对应的设备分别为 /dev/block/mtdblock0-->BootLoader /dev/block/mtdblock1-->Kernel /dev/block/mtdblock2-->File System /dev/block/mtdblock3-->Unused   其大小定义见Mach-smdk6410.c /*
 * Configuring Nandflash on SMDK6410
 */
struct mtd_partition ok6410_nand_part[] = {
 {
  .name  = "Bootloader",
  .offset  = 0,
  .size  = (1 * SZ_1M),
  .mask_flags = MTD_CAP_NANDFLASH,
 },
 {
  .name  = "Kernel",
  .offset  = (1 * SZ_1M),
  .size  = (5*SZ_1M) ,
  .mask_flags = MTD_CAP_NANDFLASH,
 },
 {
  .name  = "User",
  .offset  = (6 * SZ_1M),
  .size  = (120*SZ_1M) ,
 },
 {
  .name  = "File System",
  .offset  = MTDPART_OFS_APPEND,
  .size  = MTDPART_SIZ_FULL,
 }
}; 试着修改了block2的大小为1500*SZ_1M。然后编译并usb线更新了内核,启动成功!!!   Uncompressing Linux... done, booting the kernel.
Linux version 2.6.36ZhuJinhua (root@linux-zjh) (gcc version 4.3.2 (Sourcery G++ Lite 2008q3-72) ) #461 PREEMPT Tue May 17 22:29:30 CST 2011 略 Kernel command line: root=/dev/mtdblock2 rootfstype=yaffs2 init=/linuxrc nconsole=tty1 console=ttySAC0,115200
PID hash table entries: 1024 (order: 0, 4096 bytes)
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 256MB = 256MB total
Memory: 232880k/232880k available, 29264k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    DMA     : 0xff600000 - 0xffe00000   (   8 MB)
    vmalloc : 0xd0800000 - 0xe0000000   ( 248 MB)
    lowmem  : 0xc0000000 - 0xd0000000   ( 256 MB)
    pkmap   : 0xbfe00000 - 0xc0000000   (   2 MB)
    modules : 0xbf000000 - 0xbfe00000   (  14 MB)
      .init : 0xc0008000 - 0xc0032000   ( 168 kB)
      .text : 0xc0032000 - 0xc06ff000   (6964 kB)
      .data : 0xc0728000 - 0xc0775760   ( 310 kB)
SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1 略 Creating 4 MTD partitions on "NAND 2GiB 3,3V 8-bit":
0x000000000000-0x000000100000 : "Bootloader"
0x000000100000-0x000000600000 : "Kernel"
0x000000600000-0x00005e200000 : "User"        //这里已经变味了6M到1506M了
0x00005e200000-0x000080000000 : "File System"
PPP generic driver version 2.4.2       查看 / # [6ndf
Filesystem             Size   Used   Free   Blksize
/                        1G   112M     1G   4096
/                        1G   112M     1G   4096
/dev                   113M    44K   113M   4096
/dev                   113M    44K   113M   4096
/mnt/asec              113M     0K   113M   4096
/mnt/obb               113M     0K   113M   4096
/var                     2M     0K     2M   4096 只有1G? 怀疑不能超过1G,但实验时却是挂成功过原来的block3,近2G呢 使用busybox df 看到了 / # [6nbusybox df
Filesystem           1K-blocks      Used Available UseMounted on
/dev/root              1536000    115052   1420948   7/
devtmpfs                116524        44    116480   0/dev
tmpfs                   116524        44    116480   0/dev
tmpfs                   116524         0    116524   0/mnt/asec
tmpfs                   116524         0    116524   0/mnt/obb
tmpfs                     2048         0      2048   0/var
/dev/block/vold/179:1   2701624    168260   2533364   6/mnt/sdcard
/dev/block/vold/179:1   2701624    168260   2533364   6/mnt/secure/asec     后续再研究: 【1】内存 【2】启动过程 等   另外这/mnt/secure/asec是啥,咋跟sdcard一样呢?