de10-nano, SoCモジュールで遊ぶ [Linux Kernel編-01]
今回は、Linux Kernelの作成編です。
作成するKernelのバージョンは、v5.14となります。
なお、aptで取得しておく物は、u-boot編と兼用です。
■ Videoドライバの取得
Video用ドライバを取得します。これは、FPGA編で追加したhdmiの回路のドライバになります。位置から作ると大変なので、近いソースコードを取得し改造するのが楽です。
近いドライバは、https://github.com/altera-opensource/linux-socfpgaにあります。(tag: rel_socfpga-4.14.130-ltsi_21.10.01_pr) から、
"driver/video/fbdev/altvipfb.c" をダウンロードしてください。
(tagに注意!これより新しい所には存在しないようです)
うまく取り出せなかった場合、下記の方法でも取り出せます。
cd ~
wget https://raw.githubusercontent.com/altera-opensource/linux-socfpga/rel_socfpga-4.14.130-ltsi_21.10.01_pr/drivers/video/fbdev/altvipfb.c
■ Kernelコンパイル用のクロスツールの取得
Kernelコンパイルに、クロスコンパイルをダウンロードしました。手順は以下のとおりです。
cd ~/.
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-eabi/gcc-linaro-7.5.0-2019.12-x86_64_arm-eabi.tar.xz
tar xf gcc-linaro-7.5.0-2019.12-x86_64_arm-eabi.tar.xz
export PATH=~/gcc-linaro-7.5.0-2019.12-x86_64_arm-eabi/bin:$PATH
export ARCH=arm
export CROSS_COMPILE=arm-eabi-
■ Kernelのソースコードの取得
cd ~/de10-nano
git clone https://github.com/altera-opensource/linux-socfpga -b socfpga-5.14
cd linux-socfpga
■ altvipfb.c用のDeviceTreeの作成
Device Tree ファイルを追加します。具体的には近いファイル(socfpga_cyclone5_de0_nano_soc_FB.dts)のコピー&修正をします。
cd ~/de10-nano//linux-socfpga/arch/arm/boot/dts/
cp socfpga_cyclone5_de0_nano_soc.dts socfpga_cyclone5_de0_nano_soc_FB.dts
vim socfpga_cyclone5_de0_nano_soc_FB.dts
テキストエディタで、"socfpga_cyclone5_de0_nano_soc_FB.dts"の最後に以下を追記します。
----- ここから-----
&base_fpga_region {
ranges = <0x00000000 0xff200000 0x00200000>;
alt_vip_vfr_hdmi: vip@0x100031000 {
compatible = "ALTR,vip-frame-reader-14.0", "ALTR,vip-frame-reader-9.1";
reg = <0x00031000 0x00000080>;
max-width = <1024>;
max-height = <768>;
bits-per-color = <8>;
colors-per-beat = <4>;
beats-per-pixel = <1>;
mem-word-width = <128>;
};
};
----- ここまで-----
■ socfpga.dtsiの修正を行います。(92行目あたり)
vim socfpga.dtsi
元) base_fpga_region {
改) base_fpga_region: boot_fpga_region {
■ Makefileの修正
socfpga_cyclone_de0_nano_soc_FB.dtbを Makefile に1行を追加します。line 1060 付近に追加した例を記載します。
----- ここから-----
dtb-$(CONFIG_ARCH_INTEL_SOCFPGA) += \
socfpga_arria5_socdk.dtb \
socfpga_arria10_socdk_nand.dtb \
socfpga_arria10_socdk_qspi.dtb \
socfpga_arria10_socdk_sdmmc.dtb \
socfpga_cyclone5_chameleon96.dtb \
socfpga_cyclone5_mcvevk.dtb \
socfpga_cyclone5_socdk.dtb \
socfpga_cyclone5_de0_nano_soc.dtb \
socfpga_cyclone5_de0_nano_soc_FB.dtb \ ←この行を追加
socfpga_cyclone5_sockit.dtb \
socfpga_cyclone5_socrates.dtb \
socfpga_cyclone5_sodia.dtb \
socfpga_cyclone5_vining_fpga.dtb \
socfpga_vt.dtb
----- ここまで-----
■ altvipfb.c用の修正(2か所)
先ほどダウンロードした"altvipfb.c"を以下の Directoryにコピーします。
cp ~/altvipfb.c ~/de10-nano/linux-socfpga/drivers/video/fbdev/.
”altvipfb.c”を編集① line 220 の "dma_alloc_coherent()" の第一引数を "NULL" から "&pdev->dev" に変更します
元) fbmem_virt = dma_alloc_coherent(NULL,
改) fbmem_virt = dma_alloc_coherent(&pdev->dev,
”altvipfb.c”を編集② line 177 に以下を追加します。
info->var.pixclock = 6734;
info->var.left_margin = 148;
info->var.right_margin = 88;
info->var.upper_margin = 36;
info->var.lower_margin = 4;
info->var.hsync_len = 44;
info->var.vsync_len = 5;
■ "altvipfb.c"」が Build されるように、Makefileを編集します。
~/de10-nano/linux-socfpga/drivers/video/fbdev/Makefileの
line 14 付近に下記を追加します。
obj-$(CONFIG_FB_ALTERA_VIP_FB) += altvipfb.o
altvipfb_drv-objs := altvipfb.o
■ "altvipfb.c"が有効になるように、
"~/de10-nano//linux-socfpga/drivers/video/fbdev/Kconfig"の 222行目付近 に以下を追加します。
config FB_ALTERA_VIP_FB
tristate "Altera VIP Frame Buffer framebuffer support"
depends on FB
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
help
This driver supports the Altera Video and Image Processing(VIP)
Frame Buffer. This core driver only supports Arria 10 HW and newer
families of FPGA
■ ~/de10-nano/linux-socfpga/arch/arm/configs/socfpga_defconfig (line 120付近)に以下を追加します。
CONFIG_FB_ALTERA_VIP_FB=y
■ カーネルのコンパイル
Kernel , Device Tree の Build を行います。
cd ~/de10-nano/linux-socfpga/
make socfpga_defconfig
make -j 24 zImage dtbs modules
make modules_install INSTALL_MOD_PATH=modules_install
rm -rf modules_install/lib/modules/*/build
rm -rf modules_install/lib/modules/*/source
これでカーネルのコンパイルは終了。
次回は、動作確認です。
■ 参考先
ソフトウエア開発に関しては、下記のサイトを参考にさせて頂きました。
有難うございます。
Fun Multicores
https://blog.fun-multicores.tokyo/2020/12/de10-nano-terasic-reference-design.html
この記事が気に入ったらサポートをしてみませんか?