1. 程式人生 > >在JZ2440上移植裝置樹---上:u-boot移植

在JZ2440上移植裝置樹---上:u-boot移植

在JZ2440上移植裝置樹–上:u-boot移植

為了用上買了之後就一直在吃灰的JZ2440,決定下一番功夫在jz2440上移植裝置樹。由於韋老師的視訊中沒有講到裝置樹相關,前前後後總共花了我約五個晚上,一個週末的時間。

1、移植u-boot

u-boot可以從u-boot官網上下載;我下載的版本是u-boot-2013.03。
編譯器我用的是gcc-4.6.4也可使用韋老師提供的gcc-4.3.2;gcc安裝和u-boot解壓過程不進行贅述。

1.1 u-boot編譯

開啟u-boot原始碼目錄,u-boot-2013.01board\samsung發現並沒有支援JZ2440的單板檔案,我們選取和2440最接近的smdk2410。為了省事,可以不進行如下的新建單板的步驟:

cd board/samsung/ cp smdk2410 smdk2440 -rf
cd ../../include/configs/ cp smdk2410.h smdk2440.h
修改boards.cfg:
仿照
smdk2410 arm arm920t - samsung s3c24x0
新增:
smdk2440 arm arm920t - samsung s3c24x0

而直接在u-boot-2013.01目錄下make smdk2410_defconfig
然後make (2013版本的u-boot還沒有支援make menuconfig,我們可以通過修改smdk2410.h的巨集定義進行u-boot的配置)
ps:make之前先在u-boot主目錄下配置配置核心架構和編譯器,如下圖:


新增兩行
不出意外的話,make一路編譯成功,生成u-boot.bin檔案;

1.2 u-boot燒寫

由於JZ2440配有Jlink,我們直接通過jlink燒寫uboot.bin到nor flash。
ps:Jlink燒寫u-boot.bin參考韋老師的”如何燒寫S3C2440裸板程式.pdf
另外,如果沒有Jlink,我們還可以通過”新方法 使用NandFlash上的u-boot燒寫NorFlash.pdf“在nor flash上燒錄u-boot。
燒錄完成後,選擇nor啟動,重啟開發板,會發現串列埠無任何輸出,說明smdk2410的預設配置不適合jz2440。我們需要對其進行修改。

1.3 修改u-boot支援jz2440串列埠輸出

1.3.1 修改u-boot時鐘配置

由於S3C2440和S3C2410時鐘計演算法不一樣,開啟smdk2410.c,修改初始化函式中的時鐘配置。
vim board/samsung/smdk2410/smdk2410.c 修改如下圖:
這裡寫圖片描述

1.3.2 修改int board_early_init_f(void)函式新增CLKDIVN暫存器配置

增加一行
writel(0x5, &clk_power->clkdivn); 如下圖:
這裡寫圖片描述

1.3.3 修改串列埠驅動

通過檢視程式碼可知,串列埠初始化的程式碼在drivers\serial\serial-s3c24x0.c中,serial_init_dev(const int dev_index) 函式完成串列埠初始化,呼叫stati_serial_setbrg(const int dev_index)設定波特率,找到get_HCLK()函式,
ulong get_HCLK(void)
{
struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power();
#ifdef CONFIG_S3C2440
switch (readl(&clk_power->clkdivn) & 0x6) {
default:
case 0:
return get_FCLK();
case 2:
return get_FCLK() / 2;
case 4:
return (readl(&clk_power->camdivn) & (1 << 9)) ?
get_FCLK() / 8 : get_FCLK() / 4;
case 6:
return (readl(&clk_power->camdivn) & (1 << 8)) ?
get_FCLK() / 6 : get_FCLK() / 3;
}
#else
return (readl(&clk_power->clkdivn) & 2) ? get_FCLK() / 2 : get_FCLK();
#endif
}
發現巨集CONFIG_S3C2440並未定義,我們只需要在smdk2410.h裡定義CONFIG_S3C2440即可。
vim include/configs/smdk2410.h
這裡寫圖片描述
再次編譯並燒寫,會發現jz2440串列埠已有輸出;
ps:以上內容參考了:https://bbs.csdn.net/topics/391037133

1.4 u-boot支援網絡卡

參考韋老師視訊中的內容對smdk2410.h進行如下修改即可:
開啟board\samsung\smdk2410\smdk2410.c 找到board_eth_init函式:
這裡寫圖片描述
只要在include/configs/smdk2410.h註釋掉cs8900的巨集,定義dm9000的巨集即可,如下圖:
這裡寫圖片描述

1.5 u-boot支援nor flash

我們雖然能將uboot.bin燒錄入nor flash,然後直接在nor上啟動並通過自搬移將u-boot搬移到記憶體上執行;但是並不支援對Nor flash的寫和擦除操作。參考韋老師的視訊,只需要在drivers/mtd/jedec_flash.c 的 jedec_table[] 中增加一項匹配板子上的NOR-Flash廠商ID和裝置ID即可:
這裡寫圖片描述
另外還需要在include/configs/smdk2410.h 對以下巨集進行修改
#define CONFIG_SYS_MAX_FLASH_SECT (128)
測試一下norflash能否正確讀寫,用以下u-boot命令:
    cp.b 0 30000000 80
    cmp.b 0 30000000 80
    發現讀norflash沒有問題。再用以下幾條命令測試寫norflash:
    mw.b 30000000 12 3
    protect off all
    erase 0 ffff
    cp.b 30000000 0 3
    md.b 0 3
    發現也是121212;因此寫norflash成功,至此u-boot已經支援JZ2440開發板的norflash
ps:以上norflash移植內容參考了:https://www.cnblogs.com/blogs-of-lxl/p/5887047.html

1.5 u-boot支援nand flash

nand flash的內容我是直接按照韋老師的辦法進行移植,這裡不再贅述;詳見“畢業班第2課第3.4節_移植最新u-boot之修改程式碼支援NandFlash.WMV”
移植完之後可通過nand flash的相關操作進行測試驗證。

1.6 u-boot環境引數

1.6.1 定義環境引數存放位置

參考 韋老師 “畢業班第2課第4.1節_移植最新u-boot之裁剪和修改預設引數.WMV”中內容。
u-boot啟動時,會讀取環境引數,並判斷環境引數是否有效,有效則用,無效則用預設引數。預設引數為default_environment[]中的內容,可在include/configs/smdk2410.h 裡的進行相關巨集定義。詳情參考視訊。
需要在smdk2410.h中做如下修改:
這裡寫圖片描述
定義巨集CONFIG_ENV_IN_NAND 定義環境變數在nand flash中
定義巨集CONFIG_ENV_OFFSET 定義環境變數存放位置
定義巨集CONFIG_ENV_SIZE 定義環境變數大小
定義巨集CONFIG_ENV_RANGE 定義環境變數範圍和CONFIG_ENV_SIZE一樣

1.6.2 設定環境引數支援裝置樹

首先要在include/configs/smdk2410.h裡面定義:

#define CONFIG_OF_LIBFDT

重新編譯u-boot即可讓u-boot支援核心裝置樹dts。、
修改uboot環境引數:
bootcmd=tftp 31000000 uImage; tftp 32000000 s3c2440-jz2440.dtb; bootm 31000000 - 32000000
利用tftp命令從tftp伺服器獲取核心映象和裝置樹檔案到記憶體,再通過bootm命令即可載入核心和裝置樹;如下
U-Boot 2013.01 (May 15 2018 - 22:43:15)

CPUID: 32440001
FCLK: 400 MHz
HCLK: 100 MHz
PCLK: 50 MHz
DRAM: 64 MiB
WARNING: Caches not enabled
Flash: 2 MiB
NAND: 256 MiB
In: serial
Out: serial
Err: serial
Net: dm9000
Hit any key to stop autoboot: 0
ERROR: resetting DM9000 -> not responding
dm9000 i/o: 0x20000000, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:5b
could not establish link
Using dm9000 device
TFTP from server 192.168.8.3; our IP address is 192.168.8.4
Filename ‘uImage’.
Load address: 0x31000000
Loading: #################################################################
#################################################################
#################################################################
#######################################
876 KiB/s
done
Bytes transferred = 3426600 (344928 hex)
dm9000 i/o: 0x20000000, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:5b
could not establish link
Using dm9000 device
TFTP from server 192.168.8.3; our IP address is 192.168.8.4
Filename ‘s3c2440-jz2440.dtb’.
Load address: 0x32000000
Loading: T #
1000 Bytes/s
done
Bytes transferred = 6038 (1796 hex)
Booting kernel from Legacy Image at 31000000 …
Image Name: jz2440
Created: 2018-05-19 14:57:09 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 3426536 Bytes = 3.3 MiB
Load Address: 31000000
Entry Point: 31000040
Verifying Checksum … OK
Flattened Device Tree blob at 32000000
Booting using the fdt blob at 0x32000000
XIP Kernel Image … OK
OK
Loading Device Tree to 33b23000, end 33b27795 … OK

Starting kernel …

相關推薦

JZ2440移植裝置---u-boot移植

在JZ2440上移植裝置樹–上:u-boot移植 為了用上買了之後就一直在吃灰的JZ2440,決定下一番功夫在jz2440上移植裝置樹。由於韋老師的視訊中沒有講到裝置樹相關,前前後後總共花了我約五個晚上,一個週末的時間。 1、移植u-boot u-boot

JZ2440移植裝置---下核心和裝置移植

在JZ2440上移植裝置樹—下:核心和裝置樹移植 2、核心移植 在www.kernel.org上下載原始碼,我這裡選取的是linux-4.15.10版本。 解壓後,檔名重新命名為linux-4.15.10-jz2440。 cd進入 既然要使用裝置

u-boot-2015.04 在tq2440移植(使用spl引導u-boot

ENTRY(relocate_vectors) /* * Copy the relocated exception vectors to the * correct address * CP15 c1 V bit gives us the lo

nfs啟動u-boot啟動後從ubuntu tftp下載核心及裝置,檔案系統掛載在nfs伺服器目錄

U-Boot# setenv netargs "setenv bootargs console=${console} ${optargs}    root=/dev/nfs  rootfstype=nfsroot    nfsroot=${serverip}:${rootpath}   ip=${ipaddr

跟濤哥一起學嵌入式 第03集嵌入式要從u-boot移植學起?

得到 芯片 嵌入 生涯 開啟 自己的 trac 時間 直接 大家好,我是濤哥,歡迎閱讀《跟濤哥一起學嵌入式》第3集。俄羅斯仲夏夜,世界杯依舊如火如萘。球場上,夕陽下,梅西沒落的身影、C羅的黯淡離場,並沒有打擊大家太多的熱情。戰火依舊,老兵不死,梅羅時代是否快要終結?然而新一

Linux系統移植——裝置檔案編譯與反編譯

裝置樹檔案編譯與反編譯 一、裝置樹編譯 有兩種方式 1、將裝置樹檔案拷貝到核心原始碼的arch/*(處理器平臺)/boot/dts/*(廠家)/目錄下,    執行make dtbs 2、dtc -I dts -O dtb  *.dts > my.dtb 二、裝置

U-Boot移植DM9000網絡卡(附程式、原始碼、測試程式)

  U-Boot移植DM9000網絡卡 ——西伯利亞的風     根據書《嵌入式Linux應用開發完全手冊》移植網絡卡驅動,對於Jz2440開發板好像並不適用,Jz2440開發板使用的是DM9000網絡卡,已經不是書上講的CS8900網絡卡了。DM9000網絡卡與CS890

u-boot移植(一)---準備工作

分享 2.3 option 什麽 bison ctu http bin 執行命令 一、工具鏈的制作 1.1 工具   軟件工具:crosstool-ng   下載地址:git clone https://github.com/crosstool-ng/crosstool-n

u-boot學習(五)u-boot啟動內核

cor 定義 嵌入式 code efi cpu 頭文件 ng- part u-boot的目的是啟動內核。內核位於Flash中,那麽u-boot就要將內核轉移到內存中。然後執行命令執行之。這些操作是由bootcmd命令完畢的。 bootcmd=nand read.jffs

u-boot移植(四)---代碼修改---時鐘修改、SDRAM

port write 啟動 tro nor ble 大小 pro 正常   最開始已經建立了新單板以及配置文件,現在就需要做的是代碼的修改,配置成適合目標板使用的u-boot。 一、時鐘修改   在代碼流程分析中,我們知道,系統的啟動是: 設置 CPU 為管理員模式 關閉

u-boot移植(七)---代碼修改---存儲控制器

relative onf 修改 param nan 內存 literal def 定義 一、CPU訪問芯片的條件      CPU通過訪問存儲控制器,來讀取外部設備的數據。   CPU想訪問一個芯片,需要如下條件(配置信息): 地址線 數據線:8位/16位/32位數據

u-boot移植(十三)---代碼修改---裁剪及環境變量 一

相關 addition 並且 width load command 啟動程序 type 入參 一、內核裁剪   內核的裁剪首先就是修改我們的配置文件,即 include/configs/jz2440.h 文件,裏面定義的很多宏,我們也許用不上的就要去掉。 1 /*

u-boot移植(十三)---代碼修改---支持文件系統及補丁制作

ota ons set nan 文件的 help and ole com 一、燒寫文件系統 1.1 jffs2燒寫   1.下載文件系統:tftp 30000000 fs_mini_mdev.jffs2      2.擦除文件的塊:nand erase.part rootf

u-boot學習(三)u-boot原始碼分析

前面兩節已經知道,u-boot其實就是一個大的微控制器程式,它負責啟動核心,主要包括硬體方面的一些初始化。下面就以u-boot-1.2.0為例對u-boot原始碼進行詳細的分析。 u-boot的啟動分為兩個階段,第一階段的程式碼就是上一節所說的連結檔案裡的第一個檔案start.S檔案,它是由組合

u-boot學習(二)u-boot簡要分析

(一) 以u-boot-1.1.6為例分析目錄結構如下: 1、平臺相關的或開發板相關的目錄:board、cpu、lib_i386類似 2、通用函式的目錄:include、lib_generic、common 3、通用的裝置驅動程式:disk、drivers、dtt、fs、nand_s

u-boot學習(一)u-boot概述

 我們知道對於PC機,使用電腦時我們首先按下開機按鍵,然後等待電腦的啟動,開機完成後,我們會進行各種需要的操作,如qq聊天、寫CSDN部落格等。其實這個過程是:啟動BIOS程式,由BIOS程式引導Windows作業系統,再由作業系統識別C盤D盤等硬碟,最後執行應用程式QQ、CSDN等。對嵌

TI am335x U-boot移植(正常啟動)

 ******************************************************************             &

U-boot移植之配置及編譯詳解 1

1.Uboot 的配置過程主要涉及四個檔案:   uboot/makefile   uboot/mkconfig  uboot/config.mk  uboot/board/samsung/smdkc110/u-boot.lds   2

嵌入式BootLoader分析U-Boot簡介(二)

概述 ARM處理器的晶片商很多,所以每種晶片的開發板都有自己相應的BootLoader。其中,U-Boot(Universal BootLoader)稱為通用BootLoader,是目前開發嵌入式系統引導程式碼使用最廣泛的,如今已成為ARM平臺事實上額標準Boo

Zynq-Linux移植學習筆記之十-u-boot網路配置

在zynq開發板zc706上,網路通路由下面三個裝置組成: 其中zynq負責對phy進行配置,當zynq上的網路控制器以及phy完成正確配置時,能夠看到RJ45上面的黃燈亮,此時表明鏈路已經通了。如果u-boot中已經設定了IP地址,通過網線就可以ping通