Armadilloフォーラム

RAMディスクサイズを増やす

nic-segawa

2017年6月6日 17時46分

お世話になります。

現在、Qtアプリケーションの開発を行っていますが、アプリケーションのサイズが大きくなり、設定しているRAMサイズ内に収まらなくなってきました。そのため、カーネルの設定によりRAMサイズを増やそうと考えています。
Armadillo-410では物理的なRAMが128MBありますが、このサイズまでRAMサイズの設定を増やしても問題無いのでしょうか?
カーネルのデフォルト設定では32MBとなっていますが、物理RAMサイズよりも小さくしておく必要があるのでしょうか?

よろしくお願い致します。

コメント

> RAMサイズの設定を増やしても問題無いのでしょうか?

RAMディスクのサイズ(CONFIG_BLK_DEV_RAM_SIZE, 起動パラメータであればramdisk_size)のことですよね?
80M(0x5000000)バイトまでなら設定し、実際にユーザーランドを展開することもできるはずです。

80MB以上を設定してもbootloader側で制限しているので kernel より前に展開時にエラーします。

Qtを使う場合はライブラリのバイナリが大きいので、下記のHowtoの例では60MBまで増やしています。
http://armadillo.atmark-techno.com/howto/armadillo-440-qt-1

ご回答ありがとうございました。
80MBまで設定できることを念頭入れておきます。

すいません、追加で質問させてください。

RAM容量を増やす方法で、ご回答頂いたHow toの方法に加えて下記を見つけました。

http://armadillo.atmark-techno.com/faq/where-ramsize-defined

カーネルコンフィグレーションを変更する方法ですが、これだけを変更しても容量オーバーで起動時に停止してしまっています。
How toの例のようにカーネルパラメータも同時に変更する必要があるのでしょうか?

よろしくお願い致します。

そのHowtoの方法だけで問題ありません。
起動できない時の起動ログと、ユーザーランドの展開後サイズ、
実際に利用しているkernelの設定値を教えて貰えますか?

ログは起動時にシリアルコンソールに出力されるログをそのまま
コピーしてください。展開後サイズも起動ログに出ています。

kernelへの設定値は、一旦標準のユーザーランドイメージを使って
起動して(tftpboot --userland=で起動するとフラッシュメモリを
書き換えずに済むので楽です。)次のコマンドを実行した結果を
教えてください。

# zcat /proc/config.gz |grep CONFIG_BLK_DEV_RAM_
(以下出力例)
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=60000

ご回答ありがとうございます。

以下、起動できない時の起動ログです。

Hermit-At v2.2.0 (armadillo4x0) compiled at 10:37:04, Dec 20 2016
Uncompressing kernel..............................................................................................................done.
Uncompressing ramdisk.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................done.
Doing console=ttymxc1
Doing ramdisk_size=32768
Linux version 2.6.26-at26 (2.6.26) (atmark@atde4) (gcc version 4.4.5 (Debian 4.4.5-8) ) #44 PREEMPT Wed Jun 7 14:51:52 JST 2017
CPU: ARM926EJ-S [41069264] revision 4 (ARMv5TEJ), cr=00053177
Machine: Armadillo-410
Memory policy: ECC disabled, Data cache writeback
CPU0: D VIVT write-back cache
CPU0: I cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets
CPU0: D cache: 16384 bytes, associativity 4, 32 byte lines, 128 sets
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32512
Kernel command line: console=ttymxc1 ramdisk_size=32768
MXC IRQ initialized
PID hash table entries: 512 (order: 9, 2048 bytes)
MXC GPT timer initialized, rate = 133000000
Console: colour dummy device 80x30
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 128MB = 128MB total
Memory: 75128KB available (3228K code, 225K data, 120K init)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 480 bytes
NET: Registered protocol family 16
MXC WDOG1 Enabled
CPU is i.MX25 Revision 1.2
Clock input source is 24000000
MXC GPIO hardware
GPIO-56 autorequested
Using SDMA I.API
MXC DMA API initialized
Registered MXC PWM device: CON11_49
SCSI subsystem initialized
CSPI: mxc_spi-2 probed
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
MXC I2C driver
MXC I2C driver
MC34704 regulator successfully probed
mc34704 0-0054: Loaded
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
NET: Registered protocol family 1
checking if image is initramfs...it isn't (bad gzip magic numbers); looks like an initrd
Freeing initrd memory: 51200K
usb: Host 2 host (serial) registered
usb: DR host (utmi) registered
msgmni has been set to 246
io scheduler noop registered
io scheduler cfq registered (default)
mx2fb: Unable to set clock to 0
Console: switching to colour frame buffer device 60x17
mxc_sdc_fb mxc_sdc_fb.0: fb0: DISP0 BG fb device registered successfully.
mxc_sdc_fb mxc_sdc_fb.0: fb1: DISP0 FG fb device registered successfully.
Serial: MXC Internal UART driver
mxcintuart.1: ttymxc1 at MMIO 0x43f94000 (irq = 32) is a Freescale MXC
console [ttymxc1] enabled
mxcintuart.2: ttymxc2 at MMIO 0x5000c000 (irq = 18) is a Freescale MXC
brd: module loaded
loop: module loaded
FEC Ethernet Driver
PPP generic driver version 2.4.2
Linux video capture interface: v2.00
usbcore: registered new interface driver uvcvideo
USB Video Class driver (v0.1.0)
Driver 'sd' needs updating - please use bus_type methods
armadillo-nor: Found 1 x16 devices at 0x0 in 16-bit bank
Intel/Sharp Extended Query Table at 0x010A
Intel/Sharp Extended Query Table at 0x010A
Intel/Sharp Extended Query Table at 0x010A
Intel/Sharp Extended Query Table at 0x010A
Intel/Sharp Extended Query Table at 0x010A
Using buffer write method
Using auto-unlock on power-up/resume
cfi_cmdset_0001: Erase suspend on write enabled
armadillo-nor: use default partitions(4)
Creating 4 MTD partitions on "armadillo-nor":
0x00000000-0x00020000 : "nor.bootloader"
0x00020000-0x00220000 : "nor.kernel"
0x00220000-0x01fe0000 : "nor.userland"
0x01fe0000-0x02000000 : "nor.config"
fsl-ehci fsl-ehci.0: Freescale On-Chip EHCI Host Controller
fsl-ehci fsl-ehci.0: new USB bus registered, assigned bus number 1
fsl-ehci fsl-ehci.0: irq 35, io mem 0x53ff4400
fsl-ehci fsl-ehci.0: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 1 port detected
fsl-ehci fsl-ehci.1: Freescale On-Chip EHCI Host Controller
fsl-ehci fsl-ehci.1: new USB bus registered, assigned bus number 2
fsl-ehci fsl-ehci.1: irq 37, io mem 0x53ff4000
fsl-ehci fsl-ehci.1: USB 2.0 started, EHCI 1.00, driver 10 Dec 2004
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 1 port detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
input: gpio-keys as /devices/platform/gpio-keys.0/input/input0
i2c /dev entries driver
mxsdhci: MXC Secure Digital Host Controller Interface driver
mxsdhci: MXC SDHCI Controller Driver.
mmc0: SDHCI detect irq 159 irq 9 INTERNAL DMA
Registered led device: red
Registered led device: green
Registered led device: yellow
usbcore: registered new interface driver usbhid
usbhid: v2.6:USB HID core driver
i.MX ADC at 0x50030000 irq 46
Advanced Linux Sound Architecture Driver Version 1.0.16.
usbcore: registered new interface driver snd-usb-audio
usbcore: registered new interface driver snd-usb-caiaq
ASoC version 0.13.2
ALSA device list:
No soundcards found.
ip_tables: (C) 2000-2006 Netfilter Core Team
TCP cubic registered
NET: Registered protocol family 17
NET: Registered protocol family 15
Static Power Management for Freescale i.MX25
input: imx_adc_ts as /devices/virtual/input/input1
i.MX ADC input touchscreen loaded.
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
RAMDISK: ext2 filesystem found at block 0
RAMDISK: image too big! (51200KiB/32768KiB)
List of all partitions:
1f00 128 mtdblock0 (driver?)
1f01 2048 mtdblock1 (driver?)
1f02 30464 mtdblock2 (driver?)
1f03 128 mtdblock3 (driver?)
No filesystem could mount root, tried: ext3 ext2 msdos vfat
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(1,0)

setenvコマンドでRAMディスクサイズを大きくすると起動できますが、カーネルコンフィギュレーションのみの変更では起動できません。
コマンド実行結果は以下の通りです。

# zcat /proc/config.gz |grep CONFIG_BLK_DEV_RAM_
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=71680

よろしくお願い致します。

> Kernel command line: console=ttymxc1 ramdisk_size=32768

となっているので、hermitからsetenvで起動パラメーターに
ramdisk_sizeを設定していないでしょうか。
ランタイムで与える起動パラメーターはkernel configで設定する
デフォルト値よりも優先されます。

ご回答ありがとうございます。

setenvでのramdisk_size設定は以前行っています。
こちらが優先されてしまうということは了解しました。

新規で購入したArmadilloに対してカーネル、ユーザーランドをインストールする場合、起動パラメーターは設定されていないのでしょうか?
setenvにて設定を行わなければカーネルコンフィギュレーションの設定が適用されるのでしょうか?

よろしくお願い致します。

> 新規で購入したArmadilloに対してカーネル、ユーザーランドをインストールする場合、起動パラメーターは設定されていないのでしょうか?
> setenvにて設定を行わなければカーネルコンフィギュレーションの設定が適用されるのでしょうか?

新規に購入して一度もsetenvしていない場合は、hermitから起動パラメーターは
供給されないため、kernelはビルド時にconfigで設定したデフォルト値を使います。

CONFIG_CMDLINE がそれで menuconfig では ”Boot options" の項目の中にあります。
Armadillo-400シリーズ向けのlinux-2.6.26カーネルであれば ”console=ttymxc1,115200”
を初期値としています。

ご回答ありがとうございました。
新規の場合はカーネルコンフィギュレーションの設定が使用される旨、承知しました。
今後の量産化の際の参考とさせて頂きます。