ポーティングについて

おせわになります。いっとうです。

 

APRZA0AとLCD-KIT-B01の組み合わせで、アメリカサイトのBSPv1.3にて動作させようとしています。

buildrootの先のアドバイスのお陰でU-bootは動くようになりましたが、kernelの方が手こずっております。

APRZA0AのBSPはかなり古いため(linux3.8.13)、まずはここにあるboard-rskrza1.cとBSPv1.3(linux3.14)のboard-rskrza1.cの差分を

把握しようとしていますが、前者は446行、後者は2311行とかなり増えていて、何が変わったのか把握出来ず困っています。

まずはlogin画面まで行きたいと思っているのですが、1ヶ月やってみたもののStarting kernel …で止まったままでお手上げになりました。

 

このバージョン間の履歴みたいなものを調べる方法は無いものでしょうか。https://github.com/renesas-rz を見ても、linux3.14以前のデータを見つけることが出来ません。

  • > 結果としてU-bootは何も表示されなくなってしまいました。
    > U-bootが全く動かなくなって、手も足もでなくなっています。

    最初に申し上げた通り、「移植については、最初は、RZ/A1 Linux BSP Porting Guide などを参考にして、
    (3) の BSP を APRZA0A に新規に移植するつもりで作業された方が速いかもしれません。」です。

    まず最初に、(u-boot のプロンプトが出るまでは無理でも) シリアルコンソールに何か出るようにしましょう。
    rskrza1.c 相当のファイルのシリアルコンソールの兼用端子設定は、出来ているようですから、後は、

    include/configs/rskrza1.h 相当のファイル

    の修正が出来ていないのでしょう。BSP Porting Guide の

    「6. u-boot: Serial Console Port Select」

    を読んで修正してください。

    なお、上のコードを少し見ただけですが、これ以前のいっとうさんの書き込みを参照すると、

    > 旧:at24 0-0050: 128 byte 24c01 EEPROM, writable, 1 bytes/write
    > 新:at24 3-0050: 2048 byte at24 EEPROM, writable, 16 bytes/write

    となっていますから、AP-RZA-0A で使用している I2C のチャネルは、0だと推測するのですが、
    上のコードでは、チャネル3の兼用端子を初期化しています。間違えていませんか? また、

    > m25p80 spi5.0: found n25q128a13, expected s25fl512s
    > m25p80 spi5.0: n25q128a13 (16384 Kbytes)

    となっていますから、シリフラは、N25Q128A13 だと推測するのですが、上のコードでは、

    > Micron N25Q512Aの関数をコメントアウト、

    していますが、これも、BSP Porting Guide の

    「8.1 Add Support for your SPI Flash」

    を参照して、適切に修正してください。それ以外に、(以降、原文の誤りを訂正)

    1. 上のコードで、一部の兼用端子が被っている
    2. クロックの設定が修正されていない(main clock、RTC clock)

    などの問題が散見/推測されます。Alpha Project さんが移植された u-boot や Linux kernel の
    ソースコードと RZ/A1 Linux BSP Porting Guide を参照して、適切に修正してください。

  • お世話になります。
    なんとかU-bootの起動までは復帰することが出来ました。
    LowLevelDebugも有効になって、Starting kernel以降に以下が表示されるようになりました。

    I2C: ready
    DRAM: 10 MiB
    Using default environment

    In: serial
    Out: serial
    Err: serial
    Net: sh_eth
    => usb start
    (Re)start USB...
    USB0: scanning bus 0 for devices... 2 USB Device(s) found
    scanning usb for storage devices... 1 Storage Device(s) found
    => ext2load usb 0 0x0d000000 /uImage
    2637472 bytes read in 2258 ms (1.1 MiB/s)
    => ext2load usb 0 0x0d800000 /r7s72100-aprza0a.dtb
    7633 bytes read in 75 ms (98.6 KiB/s)
    => set bootargs ‘console=ttySC4,115200 console=tty0 ignore_loglevel root=/dev/sda1 rootwait earlyprintk’
    => bootm 0x0d000000 - 0x0d800000
    ## Booting kernel from Legacy Image at 0d000000 ...
    Image Name: Linux-3.14.79-ltsi+
    Created: 2017-07-03 0:45:11 UTC
    Image Type: ARM Linux Kernel Image (uncompressed)
    Data Size: 2637408 Bytes = 2.5 MiB
    Load Address: 08008000
    Entry Point: 08008000
    Verifying Checksum ... OK
    ## Flattened Device Tree blob at 0d800000
    Booting using the fdt blob at 0xd800000
    Loading Kernel Image ... OK
    Loading Device Tree to 208e7000, end 208ebdd0 ... OK

    Starting kernel ...

    data abort
    pc : [<0800800c>] lr : [<2096e860>]
    sp : 208edcf0 ip : 0000000c fp : 00000000
    r10: 208ef224 r9 : 208edf08 r8 : 00000000
    r7 : 00000000 r6 : 08008000 r5 : 209a61fc r4 : 00000000
    r3 : 00001dd1 r2 : 208e7000 r1 : 00000dd1 r0 : 00000dd1
    Flags: nZCv IRQs off FIQs off Mode SVC_32
    Resetting CPU ...

    resetting ...


    pcが0x0800800cということで、起動早々にこけているということでしょうか。
  • > pcが0x0800800cということで、起動早々にこけているということでしょうか。

    メッセージを見る限り、u-boot が Linux を起動した直後(未だ Linux が例外を処理する準備が出来る前) に例外を
    起こし、u-boot の例外ルーチンが呼び出されているように見えます。

    以前のカーネルは、どうされたのですか?

  • お世話になります。

    先の実行結果ですが、カーネルとデバイスファイルのアドレスが逆になっていました。

    旧BSPで動作したkernelとユーザランドは有りますので、現行U-bootを使って起動させようとしたところ、
    ロードするアドレスが0c000000-0x0c8000000の場合、0d000000-0d800000の場合共に、starting kernelで
    止まってしまいます。

    => usb start
    (Re)start USB...
    USB0: scanning bus 0 for devices... 2 USB Device(s) found
    scanning usb for storage devices... 1 Storage Device(s) found
    => ext2load usb 0 0x0d000000 /uImage
    2827952 bytes read in 2392 ms (1.1 MiB/s)
    => ext2load usb 0 0x0d800000 /rza1-aprza0a.dtb
    308 bytes read in 58 ms (4.9 KiB/s)
    => set bootargs 'console=ttySC4,115200 console=tty0 ignore_loglevel root=/dev/sda1 rootwait earlyprintk'
    => bootm 0x0d000000 - 0x0d800000
    ## Booting kernel from Legacy Image at 0d000000 ...
    Image Name: Linux-3.8.13-aprza0a-1.0
    Created: 2017-06-05 8:37:48 UTC
    Image Type: ARM Linux Kernel Image (uncompressed)
    Data Size: 2827888 Bytes = 2.7 MiB
    Load Address: 0c008000
    Entry Point: 0c008000
    Verifying Checksum ... OK
    ## Flattened Device Tree blob at 0d800000
    Booting using the fdt blob at 0xd800000
    Loading Kernel Image ... OK
    Loading Device Tree to 208e9000, end 208ec133 ... OK

    Starting kernel ...

    => usb start
    (Re)start USB...
    USB0: scanning bus 0 for devices... 2 USB Device(s) found
    scanning usb for storage devices... 1 Storage Device(s) found
    => ext2load usb 0 0x0c000000 /uImage
    2827952 bytes read in 2392 ms (1.1 MiB/s)
    => ext2load usb 0 0x0c800000 /rza1-aprza0a.dtb
    308 bytes read in 58 ms (4.9 KiB/s)
    => set bootargs 'console=ttySC4,115200 console=tty0 ignore_loglevel root=/dev/sda1 rootwait earlyprintk'
    => bootm 0x0c000000 - 0x0c800000
    ## Booting kernel from Legacy Image at 0c000000 ...
    Image Name: Linux-3.8.13-aprza0a-1.0
    Created: 2017-06-05 8:37:48 UTC
    Image Type: ARM Linux Kernel Image (uncompressed)
    Data Size: 2827888 Bytes = 2.7 MiB
    Load Address: 0c008000
    Entry Point: 0c008000
    Verifying Checksum ... OK
    ## Flattened Device Tree blob at 0c800000
    Booting using the fdt blob at 0xc800000
    Loading Kernel Image ... OK
    Loading Device Tree to 208e9000, end 208ec133 ... OK

    Starting kernel ...

    これはU-bootのPIN初期設定が上手く出来ていないということでしょうか。
  • > 先の実行結果ですが、カーネルとデバイスファイルのアドレスが逆になっていました。

    新旧の実行結果を比較して、古いカーネルと間違ったデバイスツリーをロードして実行した、と理解しました。

    > 旧BSPで動作したkernelとユーザランドは有りますので、現行U-bootを使って起動させようとしたところ、
    > ロードするアドレスが0c000000-0x0c8000000の場合、0d000000-0d800000の場合共に、starting kernelで
    > 止まってしまいます。

    ロードするアドレスが 0x0c000000-0x0c800000 の場合は、以前にご説明した通り、カーネルをロードした領域と
    カーネルの実行領域が、一部、オーバラップしますから、正常に動作しません。

    ロードするアドレスが 0x0d000000-0x0d800000 の場合は、bootargs に earlyprintk が指定されていますから、
    通常、何らかの表示があります。以前にご説明した通り、まず、earlyprintk を有効にしてみてください。

    > これはU-bootのPIN初期設定が上手く出来ていないということでしょうか。

    ご質問が解りません。
    u-boot の端子設定が (完璧ではないにせよ、それなりに)出来ているから、上のように u-boot が動いているの
    だと思いますが...

     

  • お世話になります。
    説明不足で申し訳有りません。

    旧U-bootと旧kernel→動作OK
    新U-bootと新kernrl→動作NG(earlyprintk有り)
    新U-bootと旧kernel→動作NG
    以上の結果と、アドバイス頂いた、
    > メッセージを見る限り、u-boot が Linux を起動した直後(未だ Linux が例外を処理する準備が出来る前) に例外を
    > 起こし、u-boot の例外ルーチンが呼び出されているように見えます。
    から、新U-bootがおかしいと考えました。
    旧BSPで.configを見るとerarlyprintkが有効になっていて、その上で何も表示されないと思っていたのですが、
    再度ビルドして以下を試してみます。
    旧U-bootと旧kernel(earlyprintk有り)
    新U-bootと旧kernel(earlyprintk有り)
  • お世話になります。
    旧U-bootと旧kernel(earlyprintk有り)は動き、新U-bootと旧kernel(earlyprintk有り)はStarting kernelで止まって
    何も表示されませんでした。printkが効いていないのかと旧+旧のブートログをearlyprintk無しの時のログと
    比較してみましたが、情報量が増えているのでprintkは効いているように見えます。
    旧旧<earlyprintk無し>
    Starting kernel …

    console [ttySC4] enabled, bootconsole disabled
    sh-sci.5: ttySC5 at MMIO 0xe8009800 (irq = 243) is a scif
    sh-sci.6: ttySC6 at MMIO 0xe800a000 (irq = 247) is a scif
    sh-sci.7: ttySC7 at MMIO 0xe800a800 (irq = 251) is a scif
    rspi rspi.0: master is unqueued, this is deprecated
    rspi rspi.0: probed
    rspi rspi.1: master is unqueued, this is deprecated
    rspi rspi.1: probed
    rspi rspi.2: master is unqueued, this is deprecated
    rspi rspi.2: probed
    rspi rspi.3: master is unqueued, this is deprecated
    rspi rspi.3: probed
    rspi rspi.4: master is unqueued, this is deprecated
    rspi rspi.4: probed
    Info : OTP bit = 1 (CR1 = 0xff, SR1 = 0x00)

    旧旧<earlyprintk有り>
    Starting kernel ...

    Booting Linux on physical CPU 0x0
    Linux version 3.8.13-aprza0a-1.0 (ampere@ampere-Ubuntu12) (gcc version 4.7.3 20130102 (prerelease) (crosstool-NG linaro-1.13.1-4.7-2013.01-20130125 - Linaro GCC 2013.01) ) #13 PREEMPT Tue Jul 4 14:49:30 JST 2017
    CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c53c7d
    CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
    Machine: aprza0a, model: APRZA0A
    debug: ignoring loglevel setting.
    Memory policy: ECC disabled, Data cache writeback
    On node 0 totalpages: 8192
    free_area_init_node: node 0, pgdat c0553e2c, node_mem_map c0582000
    Normal zone: 64 pages used for memmap
    Normal zone: 0 pages reserved
    Normal zone: 8128 pages, LIFO batch:0
    bootconsole [early_ttySC4] enabled
    pcpu-alloc: s0 r0 d32768 u32768 alloc=1*32768
    pcpu-alloc: [0] 0
    Built 1 zonelists in Zone order, mobility grouping on. Total pages: 8128
    Kernel command line: console=ttySC4,115200 root=/dev/sda1 rw rootdelay=3 ignore_loglevel earlyprintk=sh-sci.4,115200
    PID hash table entries: 128 (order: -3, 512 bytes)
    Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
    Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
    __ex_table already sorted, skipping sort
    Memory: 32MB = 32MB total
    Memory: 26780k/26780k available, 5988k reserved, 0K highmem
    Virtual kernel memory layout:
    vector : 0xffff0000 - 0xffff1000 ( 4 kB)
    fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)
    vmalloc : 0xc2800000 - 0xff000000 ( 968 MB)
    lowmem : 0xc0000000 - 0xc2000000 ( 32 MB)
    pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)
    modules : 0xbf000000 - 0xbfe00000 ( 14 MB)
    .text : 0xc0008000 - 0xc05033a0 (5101 kB)
    .init : 0xc0504000 - 0xc0526324 ( 137 kB)
    .data : 0xc0528000 - 0xc0554960 ( 179 kB)
    .bss : 0xc0554960 - 0xc0581648 ( 180 kB)

    U-bootに問題が有ると考えたのですが、間違っているでしょうか。
  • > 旧U-bootと旧kernel(earlyprintk有り)は動き、新U-bootと旧kernel(earlyprintk有り)はStarting kernelで止まって
    > 何も表示されませんでした。
          (中略)
    > U-bootに問題が有ると考えたのですが、間違っているでしょうか。

    新旧が自由に入れ替えて組み合わせられる前提での経験則のようですが、前提が正しいことを確認しましたか?
    u-boot とカーネルの間にもインタフェースがあります。単にジャンプすれば良いという訳ではありません。

    確認ですが、いっとうさんは、3.14 のカーネルを最初にコンフィギュレーションする際、3.8 のカーネルの
    コンフィギュレーションファイルを使用しませんでしたか?

    また、7/3のいっとうさんの書き込みですが、

    > なんとかU-bootの起動までは復帰することが出来ました。
    > LowLevelDebugも有効になって、Starting kernel以降に以下が表示されるようになりました。

    > I2C: ready
    > DRAM: 10 MiB
    > Using default environment
        (中略)
    > r7 : 00000000 r6 : 08008000 r5 : 209a61fc r4 : 00000000
    > r3 : 00001dd1 r2 : 208e7000 r1 : 00000dd1 r0 : 00000dd1
    > Flags: nZCv IRQs off FIQs off Mode SVC_32
    > Resetting CPU ...

    > resetting ...

    Starting kernel 以降に表示されているメッセージは、全て u-boot のコードが出しています。
    ですから、earlyprintk が有効になっているかは不明です。

    同じ日の私の書き込みで

    > 以前のカーネルは、どうされたのですか?

    これは、5/22 のいっとうさんの書き込みに出てくる 3.14 のカーネルです。
    途中で "bootconsole [earlycon0] disabled" と表示してそのままになるようですが
    それでOKです(その後、UART の端子設定を見直しているなら更にOK)。
    そのカーネルと新 u-boot を組み合わせて実行したログを見せてください。ログには、
    u-boot での操作も含めたフルのログをください。

  • いっとうです。時間が随分経ってしまい、申し訳有りません。

    何ヶ月か格闘していたのですが、もうソースの何処を改変したか分からなくなってしまい、
    改めてgitからBSPの作成を再開しました。
    過去のここのアドバイスを見ながらU-bootから作り直しをしました。U-bootはプロンプト
    が返ってきましたが、bootmでWrong Image Format for bootm commandが出てしまいます。
    以下は作ったU-bootとアルファさんの旧カーネルでの動作です(U-bootは使い回し出来ない点
    は承知しております。)

    U-Boot 2015.01-00077-g8680056-dirty (Dec 01 2017 - 15:27:30)

    I2C: ready
    DRAM: 10 MiB
    Using default environment

    In: serial
    Out: serial
    Err: serial
    SPI Flash Memory Map
    ------------------------------------
    Start Size SPI
    u-boot: 0x00000000 0x080000 0
    env: 0x00080000 0x040000 0
    DT: 0x000C0000 0x040000 0
    Kernel: 0x00100000 0x280000 0+1 (size*=2)
    rootfs: 0x00400000 0x1C00000 0+1 (size*=2)
    Net: sh_eth
    >> usb start
    (Re)start USB...
    USB0: scanning bus 0 for devices... 2 USB Device(s) found
    scanning usb for storage devices... 1 Storage Device(s) found
    => ext2load usb 0 0x0d000000 /uImage
    2827952 bytes read in 2392 ms (1.1 MiB/s)
    >>ext2load usb 0 0x0d800000 /rza1-aprza0a.dtb
    308 bytes read in 57 ms (4.9 KiB/s)
    => set bootargs ‘console=ttySC4,115200 console=tty0
    =>
    => bootm 0x0d000000 - 0x0d800000
    Wrong Image Format for bootm command
    ERROR: can't get kernel image!
    =>
    Wrong Image Format for bootm command
    ERROR: can't get kernel image!
    =>

    自分で作ったカーネル、アルファさんの旧カーネルでbootmを試しましたがどちらもWrong
    Imageで止まってしまいます。

    U-bootの問題と認識したのですが、formatを左右するような部分をboardファイルから見つけ出す
    ことが出来ず試行錯誤しております。

    今まで色々とアドバイス頂いたことが咀嚼出来ず申し訳有りませんが、何か「ここを見直したら」
    等有りましたら教えて頂けないでしょうか。
  • お世話になります。
    再度過去のアドバイスを確認して、問題はU-bootでは無くKernelにあると認識しました。
    boardファイルを追いかけます。