1. 程式人生 > >完全Ubuntu16.04平臺下編寫下載嵌入式S3C2440程式

完全Ubuntu16.04平臺下編寫下載嵌入式S3C2440程式

完全Ubuntu16.04平臺下編寫下載嵌入式S3C2440程式


原本照著韋東山視訊裡學的方式是Windows中編寫程式,然後檔案傳輸至Linux伺服器(虛擬機器)中編譯,再傳回來,再在Windows下用DNW下載至板子上,非常繁瑣。最近裝了Ubuntu雙系統,便嘗試一下完全在Ubuntu平臺上編寫下載S3C2440程式。參考了韋東山JZ2440教程,相關檔案大家自行下載吧。

1.程式碼編寫

就拿最簡單的C語言LED燈嘗試把
直接使用Ubuntu自帶gedit編寫三個檔案(偷懶,直接抄了例程)
crt0.S:

.text
.global _start
_start:
            ldr     r0, =0x53000000     @ WATCHDOG暫存器地址
            mov     r1, #0x0                     
            str     r1, [r0]            @ 寫入0,禁止WATCHDOG,否則CPU會不斷重啟
            ldr     sp, =1024*4         @ 設定堆疊,注意:不能大於4
k, 因為現在可用的記憶體只有4K @ nand flash中的程式碼在復位後會移到內部ram中,此ram只有4K bl main @ 呼叫C程式中的main函式 halt_loop: b halt_loop

led_on_c.c:

#define GPFCON      (*(volatile unsigned long *)0x56000050)
#define GPFDAT      (*(volatile unsigned long *)0x56000054)
int main() { GPFCON = 0x00000100; // 設定GPF4為輸出口, 位[9:8]=0b01 GPFDAT = 0x00000000; // GPF4輸出0,LED1點亮 return 0; }

Makefile:

led_on_c.bin : crt0.S  led_on_c.c
	arm-linux-gcc -g -c -o crt0.o crt0.S
	arm-linux-gcc -g -c -o led_on_c.o led_on_c.c
	arm-linux-ld -Ttext 0x0000000 -g  crt0.o led_on_c.o -o led_on_c_elf
	arm-linux-objcopy -O binary -S led_on_c_elf led_on_c.bin
	arm-linux-objdump -D -m arm  led_on_c_elf > led_on_c.dis
clean:
	rm -f led_on_c.dis led_on_c.bin led_on_c_elf *.o

2.安裝交叉編譯工具鏈(僅第一次需要)

新裝的Ubuntu系統還沒裝過交叉編譯工具鏈,照韋東山教程再來一遍。
在這裡插入圖片描述
解壓工具鏈:

$ cd /home/houjing/work/tools
//地址與教程中不一樣
$ tar xjf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2

環境變數PATH中增加路徑:

$ export PATH=$PATH:/home/houjing/work/tools/gcc-3.4.5-glibc-2.3.6/bin
//地址與教程中不一樣

教程中修改了environment檔案,看網上很多人修改了之後無法登入,想想還是算了,老老實實每次引用路徑吧。
於是在Makefile檔案前加上export PATH那行
得到:

export PATH=$PATH:/home/houjing/work/tools/gcc-3.4.5-glibc-2.3.6/bin
led_on_c.bin : crt0.S  led_on_c.c
	arm-linux-gcc -g -c -o crt0.o crt0.S
	arm-linux-gcc -g -c -o led_on_c.o led_on_c.c
	arm-linux-ld -Ttext 0x0000000 -g  crt0.o led_on_c.o -o led_on_c_elf
	arm-linux-objcopy -O binary -S led_on_c_elf led_on_c.bin
	arm-linux-objdump -D -m arm  led_on_c_elf > led_on_c.dis
clean:
	rm -f led_on_c.dis led_on_c.bin led_on_c_elf *.o

安裝ncurses

$ cd /home/houjing/work/tools
$ tar xzf ncurses.tar.gz
$ cd ncurses-5.6
$ ./configure --with-shared --prefix=/usr
$ make
$ sudo make install

3.程式碼編譯

在led程式資料夾中開啟終端

$ make

在這裡插入圖片描述

4.串列埠通訊助手Putty安裝(僅第一次需要)

$ sudo apt-get install putty
//等待安裝
//等待安裝

可能存在串列埠許可權問題,參考:https://blog.csdn.net/Rafe_ma/article/details/77838613

$ sudo adduser 替換為你的使用者名稱 dialout

5.串列埠傳輸助手DNW安裝(僅第一次需要)

參考韋東山教程
在這裡插入圖片描述

[email protected]-CW65S:~$ lsusb
Bus 002 Device 002: ID 8087:8000 Intel Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:8008 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 002: ID 2109:0813 VIA Labs, Inc. 
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 003: ID 04f2:b43b Chicony Electronics Co., Ltd 
Bus 003 Device 009: ID 5345:1234 Owon PDS6062T Oscilloscope//這個是開發板
Bus 003 Device 006: ID 046d:c077 Logitech, Inc. M105 Optical Mouse
Bus 003 Device 005: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 003 Device 004: ID 413c:2113 Dell Computer Corp. 
Bus 003 Device 002: ID 2109:2813 VIA Labs, Inc. 
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

bin目錄下無法貼上,所以在dnw資料夾中開啟終端

$ sudo cp dnw /usr/bin/dnw
$ sudo chmod +x /usr/bin/dnw

6.程式碼下載

$ sudo putty//可直接開啟putty

在這裡插入圖片描述
先選擇“Serial”,再將Serial line改為/dev/ttyUSB0,Speed改為115200,單擊Open
在這裡插入圖片描述
應該可以通訊啦
但是發現Putty偶爾顯示異常,偶爾又是好的,原因暫時沒搞清。
不過只要熟悉流程,按時空格、D,下載還是能下載的。

$ sudo dnw 替換為對應檔名.bin

在這裡插入圖片描述換了LED閃爍的程式,成功~