Цитата(Pasa @ Sep 2 2009, 20:27)

Планируется использовать только для логов. А rootfs пусть остается в озу... Я просто не знаю как объяснить ядру все это.
Код
# pwd
/home/sasa/sam9work/linux-2.6.30.4
# grep "*" -m 14 drivers/mtd/cmdlinepart.c
/*
* Read flash partition table from command line
*
* Copyright 2002 SYSGO Real-Time Solutions GmbH
*
* The format for the command line is as follows:
*
* mtdparts=<mtddef>[;<mtddef]
* <mtddef> := <mtd-id>:<partdef>[,<partdef>]
* where <mtd-id> is the name from the "cat /proc/mtd" command
* <partdef> := <size>[@offset][<name>][ro][lk]
* <mtd-id> := unique name used in mapping driver/device (mtd->name)
* <size> := standard linux memsize OR "-" to denote all remaining space
* <name> := '(' NAME ')'
что касается параметров ядра в конфиге
Код
# grep "MTD" .config | grep -v "is not set"
CONFIG_MTD=y
CONFIG_MTD_PARTITIONS=y
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_CHAR=y
CONFIG_MTD_BLKDEVS=y
CONFIG_MTD_BLOCK=y
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# Self-contained MTD device drivers
CONFIG_MTD_DATAFLASH=y
CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y
# grep "JFFS2" .config | grep -v "is not set"
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
CONFIG_JFFS2_ZLIB=y
CONFIG_JFFS2_RTIME=y
Для примера
Код
# grep "CONFIG_CMDLINE" .config
CONFIG_CMDLINE="mem=32M rootwait root=/dev/mmcblk0p1 mtdparts=spi0.0-AT45DB321x:0x10800@0x40f800(log)"
это означает что я хочу увидеть раздел в 64 кб (0х10800 / 0x420 = 0x40 = 64 - обращаю внимание - блоки в dataflash 1056 = 0x420 байт) в самом конце моей dataflash 0x420000 - 0x10800 = 0x40f800, все что до этого адреса меня не интересует - там например uboot и ядро. Корневая фс у меня на sd карте - мне так удобней

Грузимся
Код
U-Boot> tftpboot 21000000 zlinux
macb0: link up, 100Mbps full-duplex (lpa: 0xffff)
Using macb0 device
TFTP from server 192.168.0.2; our IP address is 192.168.0.136
Filename 'zlinux'.
Load address: 0x21000000
Loading: #################################################################
##############################
done
Bytes transferred = 1382892 (1519ec hex)
U-Boot> bootm 21000000
## Booting kernel from Legacy Image at 21000000 ...
Image Name: linux-2.6
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1382828 Bytes = 1.3 MB
Load Address: 20008000
Entry Point: 20008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Starting kernel ...
.... дальше не все интересно - буду писать только то на что обратить внимание
Код
Kernel command line: mem=32M rootwait root=/dev/mmcblk0p1 mtdparts=spi0.0-AT45DB321x:0x10800@0x40f800(log)
отлично - командная строка на месте - никто ее не поменял (например uboot)
Код
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffc8000 (irq 12)
mtd_dataflash spi0.0: AT45DB321x (4224 KBytes) pagesize 528 bytes (OTP)
1 cmdlinepart partitions found on MTD device spi0.0-AT45DB321x
Creating 1 MTD partitions on "spi0.0-AT45DB321x":
0x00000040f800-0x000000420000 : "log"
вот и наш раздел. Логинимся, смотрим где наш раздел в устройсвах
Код
# ls -l /dev | grep mtd
crw-rw---- 1 root root 90, 0 Dec 31 17:00 mtd0
crw-rw---- 1 root root 90, 1 Dec 31 17:00 mtd0ro
brw-rw---- 1 root root 31, 0 Dec 31 17:00 mtdblock0
На месте, у меня файлы устройств создаются автоматом потому что использую mdev из состава busybox. Создались два char device - один rw другой ro и блочное устройство. Создаем пустую фс
Код
# ls -l /tmp
#
# echo "sasa" > /tmp/sasa
# ls -l /tmp
-rw-r--r-- 1 root root 5 Dec 31 17:01 sasa
# mkfs.jffs2 -d /tmp -l -p -e 0x2100 -v -n -o /root/img.jffs2
/
f 0644 5 ( 73) 0:0 sasa
Compression mode: priority
Compressors:
none compr: 1 blocks (5) decompr: 0 blocks
lzo (prio:80) - compr: 0 blocks (0/0) decompr: 0 blocks
zlib (prio:60) + compr: 0 blocks (0/0) decompr: 0 blocks
rtime (prio:50) + compr: 0 blocks (0/0) decompr: 0 blocks
Compression errors: 0
# cp /root/img.jffs2 /dev/mtd0
#
# ls -l /mnt
# mount -t jffs2 /dev/mtdblock0 /mnt
JFFS2 write-buffering enabled buffer (528) erasesize (8448)
# ls -l /mnt
-rw-r--r-- 1 root root 5 Dec 31 17:04 sasa
# cat /mnt/sasa
sasa
# echo "pasa" > /mnt/pasa
# ls -l /mnt
-rw-r--r-- 1 root root 5 Dec 31 17:07 pasa
-rw-r--r-- 1 root root 5 Dec 31 17:04 sasa
# umount /mnt
# mount -t jffs2 /dev/mtdblock0 /mnt
JFFS2 write-buffering enabled buffer (528) erasesize (8448)
Empty flash at 0x00000078 ends at 0x00000210
# ls -l /mnt
-rw-r--r-- 1 root root 5 Dec 31 17:07 pasa
-rw-r--r-- 1 root root 5 Dec 31 17:04 sasa
#
# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 3.7G 311.4M 3.2G 9% /
mdev 14.5M 0 14.5M 0% /dev
/dev/mtdblock0 64.0K 24.0K 40.0K 38% /mnt
В какой из загрузочных скриптов добавить mount -t jffs2 /dev/mtdblock0 /mnt думаю сами разберетесь