[Armadillo:02189] Re: Armadillo-9のPC/104アクセスに関して

nakai email@hidden
2007年 10月 11日 (木) 12:50:47 JST


nakaiです。

ご指摘ありがとうございます。

> 将来的には、kernel、atmark-dist の更新を考えておりますが、
> 上記の開発環境下で、
>   ・解像度 : XGA
>   ・色深度 : 8bpp
> の適切な設定方法、及び、上記カーネルソースの適切な変更方法について、
> ご教授いただきたく、お願いいたします。

8bppですとパレットを使ってると思うので、指摘された修正でとりあえずは問題ないような気もします。
が、ソースコードを見てみますね。

> -----Original Message-----
> From: email@hidden 
> [mailto:email@hidden] On Behalf 
> Of 五十嵐@Freelines
> Sent: Thursday, October 11, 2007 10:59 AM
> To: email@hidden
> Subject: [Armadillo:02186] Armadillo-9のPC/104アクセスに関して
> 
> お世話になります。五十嵐と申します。
> 
> 先日、首記の件で、当方担当者から、アットマークテクノご担当の方に直接メールで
> 質問をさせていただきましたが、
> ご担当の方のご指摘により、本メーリングリストで、改めて質問をさせていただきます。
> 長くなってしまいますが、参考のため、これまでの経緯の抜粋を下記します。
> 
> 【当方担当者より】
> >>> 御社から購入したArmadillo−9で、PC/104へアクセスを行った際に
> >>> 下記の現象が発生します。
> >>> 構成:Armadillo−9、USBマウス、LCDモニタ
> >>>    LCDの解像度はXGA、電源は+5Vのみ供給
> >>> 現象:PC/104へ連続書込み動作を行うと画面が乱れる。
> >>>    連続読み出し動作では画面は正常である。
> >>> PC/104ボード(I/Oボード)を接続しても、Armadillo−9単体でも
> >>> 同様の現象が発生します。
> >>> 別のArmadillo−9に交換しても同様の現象が発生します。
> 
> 【アットマークテクノご担当様より】
> >> お問合わせいただいた液晶モニターの画面の乱れについて、
> >> 原因を特定するために、液晶モニタへの出力解像度を下げた(SVGAやVGA)場合の
> >> 画面乱れの有無をご確認していただくことは可能でしょうか?
> >>
> >> VGAやSVGAに出力解像度を下げると画面乱れが発生しなくなる場合は、
> >> 画面出力に必要なCPUのバス帯域が不足している可能性がございます。
> >> PC/104ボードの書込み時のwait要求が長いものですとそれだけバス占有率が高くなりますので、
> >> 連続書込みの方法に変更を加えていただくか、
> >> 出力解像度を下げてご使用くださいますようお願いいたします。
> 
> 【アットマークテクノご担当様より】
> > 画面が乱れる時のXGAの色深度は何ビットに設定されておりますでしょうか?
> >
> > XGA,16ビットカラーの場合、CPUへの負荷がかなり大きくなり、
> > 他のデバイスの動作時に画面が乱れることを確認しております。
> > Armadillo-9の製品仕様として、
> > XGAは8ビットカラーのみの対応とさせていただいておりますのでご確認をお願い
> > いたします。
> >
> > 色深度の変更は、Linuxのカーネルバージョンにより異なりますので、
> > 下記ページをご参照ください。
> > http://armadillo.atmark-techno.com/howto/set-video-resolution
> 
> 
> 上記、ご連絡いただいたように、液晶モニタへの出力解像度を SVGA (16ビット?)に
> 下げると、画面がちらつく現象は発生しなくなりました。
> 
> そこで、色深度の変更方法が記載されている、上記ページを参照しながら
>   ・解像度 : XGA
>   ・色深度 : 8bit
> に変更しようとしたのですが、下記「開発環境」に示すように、
> カーネル 2.4 系を使用しているのため、Hermit ターミナルから setenv で
> 色深度設定値の確認、及び変更ができません。
> 
>  「開発環境」
>   ・kernel      : linux-2.4.31-a9-2.tar.gz
>   ・atmark-dist : atmark-dist-20051017.tar.gz
> 
> 
> 'atmark-dist : menuconfig' を使用して、下記設定値の通りに、色深度の変更を行い、
> 'make dep all' を実行すると、下記ログに示すように、コンパイルでエラーとなってしまいます。
> 
> // [設定値] -----------------------------------------------------
>    EP93xx Default Resolution : VGA_60Hz から XGA_60Hz に変更
>    EP93xx Max Resolution     : XGA (変更せず)
>    EP93xx Color Depth        : 16bpp_565 から 8bpp に変更
> // [設定値] -----------------------------------------------------
> 
> // [LOG] -----------------------------------------------------
> ##
> ## 省略
> ##
> make
> CFLAGS="-D__KERNEL__ 
> -I/home/public/Armadillo-Kernel/linux-2.4.31-a9-2/include  
> -Wall -Wstrict-prototypes -Wno-trigraphs
>  -O -fno-strict-aliasing -fno-common -Uarm -fno-common -pipe 
> -mapcs-32 -D__LINUX_ARM_ARCH__=4 -march=armv4 -mtune=arm9tdmi
>  -malignment-traps -msoft-float -Uarm " -C  arch/arm/common
> make[2]: Entering directory 
> `/home/public/Armadillo-Kernel/linux-2.4.31-a9-2/arch/arm/common'
> make all_targets
> make[3]: Entering directory 
> `/home/public/Armadillo-Kernel/linux-2.4.31-a9-2/arch/arm/common'
> make[3]: `all_targets' に対して行うべき事はありません。
> make[3]: Leaving directory 
> `/home/public/Armadillo-Kernel/linux-2.4.31-a9-2/arch/arm/common'
> make[2]: Leaving directory 
> `/home/public/Armadillo-Kernel/linux-2.4.31-a9-2/arch/arm/common'
> arm-linux-ld -p -X -T arch/arm/vmlinux.lds 
> arch/arm/kernel/head-armv.o arch/arm/kernel/init_task.o init/main.o
> init/version.o init/do_mounts.o \
>         --start-group \
>         arch/arm/kernel/kernel.o arch/arm/mm/mm.o 
> arch/arm/mach-ep93xx/ep93xx.o kernel/kernel.o mm/mm.o fs/fs.o
> ipc/ipc.o arch/arm/common/nopci.o \
>          drivers/char/char.o drivers/serial/serial.o 
> drivers/block/block.o drivers/misc/misc.o drivers/i2c/i2c.o
> drivers/net/net.o drivers/ide/idedriver.o 
> drivers/scsi/scsidrv.o drivers/cdrom/driver.o 
> drivers/sound/sounddrivers.o
> drivers/mtd/mtdlink.o drivers/net/wireless/wireless_net.o 
> drivers/video/video.o drivers/usb/usbdrv.o
> drivers/media/media.o drivers/input/inputdrv.o \
>         net/network.o \
>         arch/arm/nwfpe/math-emu.o arch/arm/lib/lib.a 
> /home/public/Armadillo-Kernel/linux-2.4.31-a9-2/lib/lib.a \
>         --end-group \
>         -o vmlinux
> drivers/video/video.o(.text+0x5c78): In function `$a':
> : undefined reference to `chan_to_field'
> drivers/video/video.o(.text+0x5c88): In function `$a':
> : undefined reference to `chan_to_field'
> drivers/video/video.o(.text+0x5c98): In function `$a':
> : undefined reference to `chan_to_field'
> make[1]: *** [vmlinux] エラー 1
> make[1]: Leaving directory 
> `/home/public/Armadillo-Kernel/linux-2.4.31-a9-2'
> make: *** [linux] エラー 1
> [email@hidden atmark-dist-20051017]$
> // [LOG] -----------------------------------------------------
> 
> 
> Color Depth を 16bpp_565 に戻せば、'make dep all' は正常に終了します。
> 'make menuconfig' で、Color Depth を '8bpp' にすると、コンパイルでエラーになるようです。
> 
> これに対して、drivers/video/ep93xxfb.c の以下の箇所に、仮の変更を加えた結果、
> コンパイルが正常終了し、出来上がったイメージを書き込んだら、画面のちらつき現象が無くなりました。
> 
> // [CODE] -----------------------------------------------------
> #if defined(CONFIG_FB_EP93XX_16BPP_565) || \
>     defined(CONFIG_FB_EP93XX_24BPP) || defined(CONFIG_FB_EP93XX_32BPP)
> static inline u_int
> chan_to_field(u_int chan, struct fb_bitfield *bf)
> {
>         // 省略
> }
> #endif
> 
> static int
> ep93xxfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
>                    u_int trans, struct fb_info *info)
> {
>         // 省略
> 
>         switch (info->disp->visual) {
>         case FB_VISUAL_TRUECOLOR:
>                 if (regno < MAX_PALETTE_NUM_ENTRIES) {
> #if defined(CONFIG_FB_EP93XX_16BPP_565)
>                         u16 *pal;
> #else
>                         u32 *pal;
> #endif
>                         pal = info->pseudo_palette;
> 
> #if defined(CONFIG_FB_EP93XX_16BPP_565) || \                  
>                           <=====
>     defined(CONFIG_FB_EP93XX_24BPP) || 
> defined(CONFIG_FB_EP93XX_32BPP)   <=====
>                         val  = chan_to_field(red, &info->var.red);
>                         val |= chan_to_field(green, &info->var.green);
>                         val |= chan_to_field(blue, &info->var.blue);
> #endif                                                        
>                                                <=====
>                         pal[regno] = val;
>                 }
>                 break;
>         case FB_VISUAL_PSEUDOCOLOR:
>                 ep93xxfb_palette_write(regno, red, green, 
> blue, trans);
>                 break;
>         }
> 
>         return 0;
> }
> // [CODE] -----------------------------------------------------
> 
> 
> 将来的には、kernel、atmark-dist の更新を考えておりますが、
> 上記の開発環境下で、
>   ・解像度 : XGA
>   ・色深度 : 8bpp
> の適切な設定方法、及び、上記カーネルソースの適切な変更方法について、
> ご教授いただきたく、お願いいたします。
> 
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/mailman/listinfo/armadillo




armadillo メーリングリストの案内