【チュートリアル】Ubuntuの下でARMプロセッサarm-linux-gccクロスコンパイル環境およびOpenJTAG+openocd書き込み環境を構築する


UbuntuでARMプロセッサarm-linux-gccクロスコンパイル環境およびOpenJTAG+openocd書き込み環境を構築
前言
このチュートリアルで使用するオペレーティングシステムはUbuntu 16.04で、使用するARMプロセッサはSamsung S 3 C 2440で、FriendlyARM Mini 2440開発ボードで操作し、OpenJTAG+openocd書き込みプログラムを使用します.
もちろん、理屈は通じるので、異なるプラットフォームの下でも一部の配置を少し修正すればいいだけです.
ステップ
1.arm-linux-gccクロスコンパイルツールをダウンロードし、プログラムを作成します.
(次の文章では、私が勉強している間に書いたプログラム(C言語とアセンブリインタラクション)を発表します)
Makefileはこのように書くことができます(ledを点灯する例):
led.bin:start.o
        arm-linux-ld -Ttext 0 -o led.elf start.o
        arm-linux-objcopy -O binary led.elf led.bin
        arm-linux-objdump -D led.elf > led.dis
start.o:start.s
        arm-linux-gcc -o start.o start.s -c

ファイルを生成する.binは後続の使用に供する
  • OpenJTAGは、プログラムを記録するためのデバッグ/シミュレーションツールです.私の手元にあるのはFT 2232 Dチップで、USB回転JTAG、USBシリアルポート機能も備えています.では、以前JLinkでWindowsのKeil MDKでstm 32を開発していたのと何が違うのでしょうか.たとえば、OpenJTAGはWindows、Linux、MACの下で使用できますが、JLinkはWindowsでのみ使用でき、Linuxの下ではデバッグ機能が使用できません.そのため、ある程度OpenJTAGの方が実用性があります.

  • ハードウェアを使用するには、まずドライバをインストールする必要があります.intra 2 net社のウェブサイトに最新版(旧版ももちろん可能ですが、いくつかの構成では異なるかもしれません)のlibftdiをダウンロードする必要があります.これはOpenJTAGが使用しているFT 2232 Dチップの下位ドライバライブラリです.(注:libusb-devをインストールする必要があります)
    ダウンロード後のコンパイルインストール:
    ./configure
    make
    sudo make install

    もちろんgitでソースコードをダウンロードすることもできます.
    ftdi-eeprom(FT 2232に接続されているe 2 promを焼くツール)もインストールしたい場合は、同じ方法でダウンロードしてインストールします.(注:libconfuse-devをインストールする必要があります)
    2.openocdのインストール
    OpenocdはオープンソースのJTAG上位機プログラムで、現在多くのチップをサポートしており、サポートされているチップは増加しています.もちろん、ソースコードは公開されており、自分でコンパイルできるので、カスタムツールドライバを増やすのも簡単です.作業ディレクトリを開き、端末を開き、git:sudo apt-get install gitをインストールする必要があります.
    git clone git://openocd.git.sourceforge.net/gitroot/openocd/openocd

    オープンnocdの最新版のソースコードが入手できます
    Openocdのディレクトリに入り、次の操作を行います.
    sudo ./bootstrap
    sudo ./configure --enable-ftdi --enable-usb_blaster_libftdi --enable-openjtag_ftdi --enable-maintainer-mode --enable-legacy-ft2232_libftdi
    sudo make
    sudo make install

    上の./configureのパラメータは私の板によって決められています.他のチップ、デバッグツールなどを使用する場合は、対応する修正を行います.詳細は:
    ./configure --help

    インストールが完了したら、
    openocd -v

    バージョン情報が出力されます.
    Open On-Chip Debugger 0.10.0-dev-00251-g888d5a5-dirty (2016-04-24-13:35)
    Licensed under GNU GPL v2
    For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html

    3.openocdを構成する.cfg
    以下のプロファイルを参照してください.(ここでは、ハードウェアによって異なります)
    interface ftdi
    ftdi_device_desc "USB<=>JTAG&RS232"
    ftdi_vid_pid 0x1457 0x5118
    
    ftdi_layout_init 0x0f08 0x0f1b
    ftdi_layout_signal nSRST -data 0x0200 -noe 0x0800
    ftdi_layout_signal nTRST -data 0x0100 -noe 0x0400
    
    jtag_khz 1500
    
    if { [info exists CHIPNAME] } {
       set  _CHIPNAME $CHIPNAME
    } else {
       set  _CHIPNAME s3c2440
    }
    
    if { [info exists ENDIAN] } {
       set  _ENDIAN $ENDIAN
    } else {
      # this defaults to a bigendian
       set  _ENDIAN little
    }
    
    if { [info exists CPUTAPID] } {
       set _CPUTAPID $CPUTAPID
    } else {
       set _CPUTAPID 0x0032409d
    }
    
    #jtag scan chain
    jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0x0f -expected-id $_CPUTAPID
    
    set _TARGETNAME $_CHIPNAME.cpu
    target create $_TARGETNAME arm920t -endian $_ENDIAN -chain-position $_TARGETNAME
    $_TARGETNAME configure -work-area-phys 0x40000000  -work-area-size 0x4000 -work-area-backup 1
    
    #reset configuration
    adapter_nsrst_delay 100
    jtag_ntrst_delay 100
    reset_config trst_and_srst
    
    #-------------------------------------------------------------------------
    # JTAG ADAPTER SPECIFIC
    # IMPORTANT! See README at top of this file.
    #-------------------------------------------------------------------------
    
        adapter_khz 12000
        #jtag interface
    
    #-------------------------------------------------------------------------
    # GDB Setup
    #-------------------------------------------------------------------------
    
        gdb_breakpoint_override hard
    
    #------------------------------------------------
    # ARM SPECIFIC
    #------------------------------------------------
    
        targets
        arm7_9 dcc_downloads enable
        arm7_9 fast_memory_access enable
    
        nand device 0 s3c2440 $_TARGETNAME
    
        adapter_nsrst_delay 100
        jtag_ntrst_delay 100
        reset_config trst_and_srst
        init
    
        echo "--- login with - telnet localhost 4444  ---"

    4.openocdを起動する
    開発ボードに接続されているOpenJTAGのUSBインタフェースをPCに接続し、端末に入力する.
    openocd -f openocd.cfg

    正常にアクセスしたら、別の端末を開き、次のように入力します.
    telnet localhost 4444

    進入操作指令方式
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    Open On-Chip Debugger
    > 
  • pollを入力、開発ボードの現在の情報
  • を表示する.
  • halt入力、
  • 一時停止
  • 入力resume、回復
  • 入力reset、リセット
  • LEDを点灯させるプログラムを例に挙げます.
    halt //          
    
    nand probe 0//   Nand Flash
    
    nand erase 0 0 0x20000//  0     128K  
    
    nand write 0 led.bin 0//  LED.bin
    
    reset//  

    そしてLEDが点灯しているのが見えます!
  • 私の後続の学習過程のプログラムの共有を読むことを歓迎します&解析
  • 読んでくれてありがとう^^
    参考資料の一部は次のとおりです.http://blog.chinaunix.net/uid-20543672-id-94365.html
  • 個人用ページ:http://www.techping.cn/
  • 私の個人サイトブログ:http://www.techping.cn/blog/wordpress/
  • 私のCSDNブログ:http://blog.csdn.net/techping
  • 私の簡単な本:http://www.jianshu.com/users/b2a36e431d5e/timeline
  • 私のGitHub:https://github.com/techpingようこそお互いfollow~