JZ2440學習筆記

來源:互聯網
上載者:User
JZ2440學習筆記
 
Chili
 
2015.5
 
 
 
 
 
 

前言
本人入手JZ2440半個月,以前未接觸過linux,但在校接觸過許多不跑linux系統的CPU,具有LPC1114,LPC1343,STM32,blackfin等處理器的編程經驗,對微處理器的原理以及運行方式具有一定的瞭解。靠著這點小經驗,以及新學習的知識,自己動手移植了最新的uboot,絕對原創,得益於韋老師的書籍以及開發板,能讓我們這個小白可以踏進linux的世界,但本人畢竟在linux方面只是個類似小白的學生,許多不對之處,希望大家不吝指教。
 
 
 
 
說明:閱讀本文需要一點的ARM以及S3C2440的基礎知識,建議先閱讀《嵌入式Linux應用開發完全手冊》,此書對對ARM以及JZ2440有很好的介紹和說明,在閱讀中有不懂的也可以再去翻看此書,查漏補缺。

JZ2440移植最新u-boot-2015.04-rc4.tar
1,配置uboot
去官網下載最新uboot原始碼u-boot-2015.04-rc4.tar,開發環境採用JZ2440光碟片上的vmware虛擬機器ubuntu9.10。
本次採用smdk2410的預設配置來配置uboot,然後啟動類似linux一樣的menuconfig菜單進行配置,然後make,並燒寫進JZ2440看效果,然後根據現象一步步修改。
我們移植uboot的基本原則是:因為我們剛上手,可能什麼都不知道,更加不知需要更改什麼,這個時候我們就先盡量什麼都不改,直接燒寫進去看現象,然後根據現象或者提示資訊一步步更改,從而移植完成。
配置命令如下:
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ tar  jxvf  u-boot-2015.04-rc4.tar.bz2
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ cd  u-boot-2015.04-rc4/
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make smdk2410_defconfig
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make menuconfig
3,在uboot根目錄執行
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make
報錯:
cc1: error: bad value (armv4) for -march= switch
cc1: error: bad value (armv4) for -mtune= switch
make[2]: *** [include/autoconf.mk] Error 1
make[1]: *** [silentoldconfig] Error 1
make: *** No rule to make target `include/config/auto.conf', needed by `include/config/uboot.release'.  Stop.
錯誤並不可怕,學會看錯誤提示,根據提示進行下一步工作。錯誤提示意思好像是說機器平台不對,那麼我們就來指定,開啟頂層Makefile,指定交叉編譯器和架構平台:
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ vim Makefile 
如圖所示添加下面兩行:
ARCH=arm
CROSS_COMPILE=arm-linux-
 
完成後,再次執行:make 開始編譯
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make
報錯:
  AS      arch/arm/lib/vectors.o
  AS      arch/arm/lib/crt0.o
  AS      arch/arm/lib/relocate.o
arch/arm/lib/relocate.S: Assembler messages:
arch/arm/lib/relocate.S:50: Error: selected processor does not support `bx lr'
make[1]: *** [arch/arm/lib/relocate.o] Error 1
make: *** [arch/arm/lib] Error 2
耐著性子認真看錯誤資訊,說不支援bx lr指令,這是arm的一個跳轉指令,沒理由arm交叉編譯器不支援啊,是不是版本太低了。
查看版本:
arm-linux-gcc -v
 
版本為3.4.5,貌似JZ2440光碟片上的ubuntu上內建的交叉編譯環境是比較老了,那我們網上搜尋個新的,裝上試試看。
在”http://dl.dbank.com/c01p81pb9i“網站有arm-linux-gcc 4.4.3下載,並有詳盡的安裝方法,讀者可自行下載並安裝。安裝完成後查看版本如下,說明安裝成功。
 
2,編譯
在arm-linux-gcc 4.4.3的基礎上進行uboot編譯:
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ make
接下來就是一路編譯成功,並生產uboot.bin等映像檔案。
 

3,燒寫預設配置的uboot
由於JZ2440配有Jlink,Jlink一般來說不支援燒寫nand falsh,當然可以購買百問網的Gflash,其可以通過Jlink燒寫nand flash。我們一般是購買JZ2440標準配置開發板,那咱就用nor flash啟動,並通過Jlink的J-Flash將uboot.bin燒寫進nor flash,重啟,觀察串口輸出。 
Ps:安裝 學前班\J-link\USB-ICE,安裝完後開啟J-Flash, 開啟 開發板資料\如何燒寫S3C2440裸板程式\s3c2440.jflash工程,開啟剛編譯成功的檔案uboot.bin,按下F5開始編程。
重啟開發板,串口無任何現象,說明預設的smdk2410.h的配置還是不適用與我們現在JZ2440的板子。好了接下來開始一點點修改uboot了。
4,修改uboot支援JZ2440串口
4.1 修改uboot時鐘配置
串口沒有輸出的話,首先想到的肯定是時鐘沒有配置好,好的,有想法立即就去試試。
相信看過韋老師的《嵌入式Linux應用開發完全手冊》,應該知道S3C2440和S3C2410時鐘計演算法不一樣,因此我們開啟smdk2410.c,修改初始化函數中的時鐘配置。命令如下:
book@book-desktop:~/uboot/u-boot-2015.04-rc4$ vim board/samsung/smdk2410/smdk2410.c 
修改如下:
1,將時鐘宏更改如圖
#define M_MDIV 0x5c
#define M_PDIV    0x1
#define M_SDIV    0x1
 

2,修改int board_early_init_f(void)函數添加CLKDIVN寄存器配置
如下:
writel(0x5, &clk_power->clkdivn);
 
 
儲存,並編譯,燒寫,重啟開發板查看現象:
 
 
分析:有列印亂碼資料,說明板子至少在工作,只是傳輸速率設定不正確,下面看串口傳輸速率在哪裡設定,並進行修改就可以了。

4.2 修改串口驅動

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.