linux-xlnx+ADI7511ドライバマージのエラーが見えてきた。
何度かトライすると下記のようなエラーメッセージなった。
DEBUG: Executing shell function do_compile
NOTE: make -j 4 uImage CC=arm-poky-linux-gnueabi-gcc -mno-thumb-interwork -marm LD=arm-poky-linux-gnueabi-ld.bfd UIMAGE_LOADADDR=0x8000
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
CC scripts/mod/devicetable-offsets.s
GEN scripts/mod/devicetable-offsets.h
HOSTCC scripts/mod/file2alias.o
HOSTLD scripts/mod/modpost
make[1]: `include/generated/mach-types.h'' is up to date.
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
CHK kernel/config_data.h
CC sound/soc/adi/adv7511_hdmi.o
CC drivers/gpu/drm/adi_axi_hdmi/axi_hdmi_crtc.o
sound/soc/adi/adv7511_hdmi.c:41:13: error: ''SND_SOC_DAIFMT_SPDIF'' undeclared here (not in a function)
.dai_fmt = SND_SOC_DAIFMT_SPDIF |
^
make[3]: *** [sound/soc/adi/adv7511_hdmi.o] Error 1
make[2]: *** [sound/soc/adi] Error 2
make[1]: *** [sound/soc] Error 2
make: *** [sound] Error 2
make: *** Waiting for unfinished jobs....
drivers/gpu/drm/adi_axi_hdmi/axi_hdmi_crtc.c: In function ''axi_hdmi_crtc_update'':
drivers/gpu/drm/adi_axi_hdmi/axi_hdmi_crtc.c:53:28: error: ''struct xilinx_dma_config'' has no member named ''hsize''
axi_hdmi_crtc->dma_config.hsize = mode->hdisplay * fb->bits_per_pixel / 8;
^
drivers/gpu/drm/adi_axi_hdmi/axi_hdmi_crtc.c:54:28: error: ''struct xilinx_dma_config'' has no member named ''vsize''
axi_hdmi_crtc->dma_config.vsize = mode->vdisplay;
^
drivers/gpu/drm/adi_axi_hdmi/axi_hdmi_crtc.c:55:28: error: ''struct xilinx_dma_config'' has no member named ''stride''
axi_hdmi_crtc->dma_config.stride = fb->pitches[0];
^
make[4]: *** [drivers/gpu/drm/adi_axi_hdmi/axi_hdmi_crtc.o] Error 1
make[3]: *** [drivers/gpu/drm/adi_axi_hdmi] Error 2
make[2]: *** [drivers/gpu/drm] Error 2
make[1]: *** [drivers/gpu] Error 2
make: *** [drivers] Error 2
ERROR: oe_runmake failed
WARNING: /mnt/disk1/yocto/yocto_2013.8_3/poky/build/tmp/work/zedboard_aquaxis-poky-linux-gnueabi/linux-xlnx/3.10-xilinx+git7f5d01bf5fbac64ac42781d061582fa51dd14a37-r1/temp/run.do_compile.7181:1 exit 1 from
exit 1
ERROR: Function failed: do_compile (log file is located at /mnt/disk1/yocto/yocto_2013.8_3/poky/build/tmp/work/zedboard_aquaxis-poky-linux-gnueabi/linux-xlnx/3.10-xilinx+git7f5d01bf5fbac64ac42781d061582fa51dd14a37-r1/temp/log.do_compile.7181)
つまり、
ひとつはsound/soc/adi/adv7511_hdmi.cのSND_SOC_DAIFMT_SPDIFが見つからないこと。
もうひとつはdrivers/gpu/drm/adi_axi_hdmi/axi_hdmi_crtc.cのaxi_hdmi_crtc->dma_config構造体っぽい。
SND_SOC_DAIFMT_SPDIFが無い件
前者はADIのLinuxリポジトリと見比べるしか無い。
SND_SOC_DAIFMT_SPDIFはおそらく、標準ヘッダの中に書かれてるっぽい。
ADIのLinuxリポジトリを検索すると下記のようになったので標準ヘッダに書かれているのは正解だった。
drivers/gpu/drm/i2c/adv7511_audio.c:157: case SND_SOC_DAIFMT_SPDIF:
sound/soc/adi/adv7511_hdmi.c:41: .dai_fmt = SND_SOC_DAIFMT_SPDIF |
include/sound/soc-dai.h:36:#define SND_SOC_DAIFMT_SPDIF 8 / SPDIF /
しかし、Driverにも使っている部分があったな。
meldでdiffを表示してみると・・・
差分が表示されない。
こういうことあるんだ・・・
改めて、diffコマンドで、
< #define SND_SOC_DAIFMT_SPDIF 8 / SPDIF /
これだけなのでmeldの件は良いとして、これはファイル差し替えで解決だな。
axi_hdmi_crtc->dma_config構造体
構造体が悪いのはなんだろうか?
これもADIのLinuxリポジトリと差分を取るしかなさそうだ。
これはdrivers/gpu以下を単純に探してみると下記になった。
axi_hdmi_crtc.c:53: axi_hdmi_crtc->dma_config.hsize = mode->hdisplay * fb->bits_per_pixel / 8;
axi_hdmi_crtc.c:54: axi_hdmi_crtc->dma_config.vsize = mode->vdisplay;
axi_hdmi_crtc.c:55: axi_hdmi_crtc->dma_config.stride = fb->pitches[0];
axi_hdmi_crtc.c:58: (unsigned long)&axi_hdmi_crtc->dma_config),
58行目は下記なのでこれもどこか標準のところにあるんだな。
dmaengine_device_control(axi_hdmi_crtc->dma, DMA_SLAVE_CONFIG,
(unsigned long)&axi_hdmi_crtc->dma_config),
って、axi_dmaだけど・・・
こんな感じの構造体です。
struct axi_hdmi_crtc {
struct drm_crtc drm_crtc;
struct dma_chan *dma;
struct xilinx_dma_config dma_config;
int mode;
};
ここからcontainer_ofでdrm_crtcを抜き出して、dma_configにしているようです。
朝の解析はここまで後は夜に解析する。