Железо: AT91RM9200, 64Мб ОЗУ, 8 Мб флэш. Загрузка происходит так: загрузчик вытаскивает из флэша образ ядра и initrd в оперативку. Ядро использует initrd как rootfs. Т.е. как на обычных компах, но нету последующего монтирования фс с жёсткого диска из-за отсутствия такового. Всё размещается в ОЗУ. Есть 2 рам-диска по 8 Мб. Один - initrd, как я понимаю, другой - /var/tmp. Система работает стабильно, после загрузки состояние оперативки такое:
Код: Выделить всё
# cat /proc/meminfo
MemTotal: 62284 kB
MemFree: 47344 kB
Buffers: 8548 kB
Cached: 2820 kB
SwapCached: 0 kB
Active: 3132 kB
Inactive: 9068 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 62284 kB
LowFree: 47344 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 560 kB
Writeback: 0 kB
Mapped: 2112 kB
Slab: 1756 kB
CommitLimit: 31140 kB
Committed_AS: 4180 kB
PageTables: 128 kB
VmallocTotal: 956416 kB
VmallocUsed: 9688 kB
VmallocChunk: 946172 kB
Файловые системы:
Код: Выделить всё
# mount
rootfs on / type rootfs (rw)
/dev/root on / type ext2 (rw)
proc on /proc type proc (rw)
sys on /sys type sysfs (rw)
/dev/ram1 on /var/tmp type ext2 (rw)
/dev/loop0 on /mnt/settings type ext2 (rw)
# df -h /var/tmp
Filesystem Size Used Available Use% Mounted on
/dev/ram1 7.7M 464.0k 6.9M 6% /var/tmp
Т.е. оперативы достаточно.
Далее, загружаю файл через httpd+POST. Заголовки, добавленные httpd в файл вырезаются так:
Код: Выделить всё
tee|sed '1,4d'|sed '$d'|sed '$d'|sed '$d'|sed '$d'|sed '$d'|sed '$d' > /tmp/update.tar.gz
Потом ядро падает:
Код: Выделить всё
Unable to handle kernel paging request at virtual address 7a29ca23
pgd = c36bc000
[7a29ca23] *pgd=00000000
Internal error: Oops: 3 [#1]
Modules linked in:
CPU: 0
PC is at schedule+0x358/0x768
LR is at 0x15cc5b
pc : [<c01f4558>] lr : [<0015cc5b>] Not tainted
sp : c3731e60 ip : 7a29c8cb fp : c3731e9c
r10: c0d20a80 r9 : c3730000 r8 : c0c120a0
r7 : 00001000 r6 : c027ed08 r5 : c027ed08 r4 : c3346ca0
r3 : 0000022c r2 : 30000013 r1 : 30000093 r0 : a5b56e00
Flags: nzCV IRQs off FIQs on Mode SVC_32 Segment user
Control: 317F Table: 236BC000 DAC: 00000015
Process sed (pid: 877, stack limit = 0xc3730198)
Stack: (0xc3731e60 to 0xc3732000)
....
Не могу понять, почему 40 свободных мегабайт не хватает для обработки 4-х мегабайтного файла?