埋め込み式linux裸板開発--LED点灯


前の文章はlinuxの下でgccを通じてプログラムソースファイルのコンパイル実行を完了する過程を書いた.そしてmakefileファイルの作成、最後に端末プラットフォームでmyhello wordを出力!これに基づいて,linuxコンパイルにより生成されたコードをARM上でハードウェア実装することを学習した.まだシステム移植には触れていないので,裸板プログラム開発である.
1.ソースコード作成
ARM裸板プログラムに必要なコード原料は主にアセンブリファイル、Cファイル、makefileファイルを含む.各ファイルにはそれぞれの機能があります.(1)アセンブリファイルが完了して番犬を閉じる;クロックを構成する;sdramを初期化する;スタックを設定する;およびmain関数に相当するC関数実行エントリにジャンプし、コードは以下の通りである(このルーチンはクロックとsdramを構成する必要はない).
@******************************************************************************
@ File:crt0.S
@   :     C  
@******************************************************************************       

@ :              ,SDRAM  ,     LED   。    12Mhz
.text
.global _start
_start:                                             @        ,         
                ldr     r0,=0x53000000  @          (32       ,r0   0x53000000) 
                                      @ ldr mov    ,ldr  32   , mov   8  
                mov     r1,  #0x0        @      r1   
                str     r1,  [r0]       @ r1       0x0 r0  

              @                  0

              ldr   sp,= 4*1024      @       4K(NAND FLASH 4k)
                bl      main                        @    main  ,            
haltloop:

(2)Cファイルアセンブリのコード量は相対的に少なく、必要な初期化機能のみを実行し、真の機能部分はCファイルにある.Cファイルは主にレジスタアドレスマクロ定義、周辺初期化、機能実現などを実行する.
本例で点灯するledピンはGPF 4であるため、2440の参考マニュアルを照会し、GPFの関連レジスタアドレスを確認する必要があり、主に構成されたレジスタはGPFCON(制御レジスタ)とGPFDAT(データレジスタ)である.GPFCONの主な制御ピンの動作モード(モードは、入力、出力、多重)であり、そのうち2桁ごとに1つのピンの状態を制御する.
ピンの高低レベルはGPFDATによって制御され、各ビットはピンを制御する.
だからチップマニュアルを見ることを学ぶことはやはり重要で、各レジスタを理解してプログラミングを行うと同時に、シフト操作を身につけるべきで、レジスタのプログラミングでよく使われています.この部分のコードは次のとおりです.
#define GPFCON          (*(volatile unsigned long*)0x56000050)
#define GPFDAT          (*(volatile unsigned long*)0x56000054)
#define GPFUP         (*(volatile unsigned long*)0x56000058)
#define GPIO_Pin_0       ((volatile unsigned char)0x00)
#define GPIO_Pin_1       ((volatile unsigned char)0x01)
#define GPIO_Pin_2       ((volatile unsigned char)0x02)
#define GPIO_Pin_3       ((volatile unsigned char)0x03)
#define GPIO_Pin_4       ((volatile unsigned char)0x04)
int main()
{
    GPFCON =  0X01<

(3)makefileファイル作成コンパイルルールは、前述の文章と同じ原理です.linuxにはARM専用のコンパイルツールがあり、主にこの3つを使用しています.
  • arm-linux-gcc:主にファイルのコンパイル時に(.C/.S)ファイルからプログラミングする.oターゲットファイルの場合に使用します.
  • arm-linux-ls:主にすべてに対して.oターゲットファイルリンク実行可能ファイル
  • を生成する
  • arm-linux-objcopy:主に実行可能ファイルをバイナリ変換する.bin書き込み可能ファイル
  • ファイルコードは次のとおりです.
    led_on.bin : crt0.S  led_lighton.c
        arm-linux-gcc -g -c -o crt0.o crt0.S
        arm-linux-gcc -g -c -o led_lighton.o led_lighton.c  
        arm-linux-ld -Ttext 0x0000000 -g -o led_on_elf  crt0.o led_lighton.o
        arm-linux-objcopy -O binary -S led_on_elf led_on.bin
    clean:
        rm -f   led_on.bin led_on_elf *.o

    上記の3つのファイルはそれぞれcrt 0である.S,led_lighton.c,Makefile.これは最も簡単なルーチンファイルで、入門に適しています.コードファイルダウンロードアドレスリンク:http://download.csdn.net/download/ludaoyi88/10151739
    1.ファイルコンパイルリンク
    アセンブルファイルとCファイルはリンクをコンパイル必要がある実行可能ファイルを生成し、実行可能ファイルを再変換する.binバイナリファイルは、開発ボードに記録して実行できます.これらのコンパイルリンクと変換はmakefileに書かれており、linux端末でmakeコマンドを入力するだけで実行できます.securecreCREでリモートでlinuxホスト(ここでは仮想マシン)にログインし、FTPファイル転送ツールでlinuxホストに接続し、Windowsの下で上記3つのコードファイルを作成し、全体の過程は前述の文章と同様に、これ以上説明しない.3つのコードファイルをlinuxホストの関連ファイルパスにアップロードし、端末でmakeコマンドを入力し、makefileファイルを実行し、実行結果は下図の通りである:
    以上、led_が生成されていることがわかります.on.binのバイナリファイルは、このファイルを開発ボードに焼き付け、焼き付け方法はoflash、dnw、tftpd、nfsなどの方法でダウンロードできます.ここではWindowsの下でdnwからプログラムをダウンロードし、まずバイナリファイルをwindowに転送してからダウンロードします(開発ボードはnandにダイヤルすべきです).図のように:
    ダウンロードに成功すると、開発ボードをリセットし、ledランプが点灯します.効果は図のようです(成功しましたO(∩∩)Oははは~).これは裸板開発の入門にすぎず、他の外付けがあれば複雑で、同志は努力しなければならない.