【目標】:uboot能把kernel加載起來
【準備】:
1、資料(原理圖,芯片手冊),代碼(u-boot-2013.01.tar.bz2)
2、是否支持芯片(arch/arm/cpu/armv7/)
Y:go
N:(下載最新的uboot,找廠家)
3、是否支持板子 (board)
Y:編譯 驗證 一下 交付。
N:(下載最新的uboot,找廠家,自己搞 借鑒 相同SOC的板子 origen)
【借鑒】
1、解壓
把u-boot-2013.01.tar.bz2 上傳到Ubuntu ,解壓
tar -xvf u-boot-2013.01.tar.bz2
2、修改源碼:
#進入頂層目錄后
cp -a board/samsung/origen board/samsung/fs4412
cp include/configs/origen.h include/configs/fs4412.h
【編譯】
1、在boards.cfg 添加 fs4412目標
//Target ARCH CPU Board name Vendor SoC Options
fs4412 arm armv7 fs4412 samsung exynos
2、
修改Makefile: CROSS_Cxx = arm-linux-
make distclean //第一次編譯的時候才需要
make fs4412_config
make // 生成 u-boot.bin
【燒寫】
【第一種】
1、把SD拔出,插入電腦
2、ubuntu下識別到 ls /dev/sd* 如果顯示了/dev/sdb 那么就有了。fdisk -l
3、使用工具里面的mkuboot.sh進行燒寫
1)修改 mkuboot.sh
./mkuboot.sh
2) sudo ./mkuboot.sh
【第二種】保證sd卡里面已經有好的u-boot
1、把撥碼開關撥到SD卡啟動
2、進入fs4412# 界面
3、把u-boot.bin下載到板子上
tftp 41000000 u-boot.bin
4、movi write u-boot 41000000 //把uboot燒寫到emmc中的u-boot分區中
5、斷電,撥碼開關撥到EMMC啟動
6、查看效果
驗證:
情況是沒有輸出???
點一個燈來試試,測試下我們編譯的u-boot到底在不在運行?
#if 1
ldr r0, =0x11000c40 @GPK2_7 led2
ldr r1, [r0]
bic r1, r1, #0xf0000000
orr r1, r1, #0x10000000
str r1, [r0]
ldr r0, =0x11000c44
mov r1,#0xff
str r1, [r0]
#endif
現象:燈沒亮,uboot程序沒有執行
解決方法: 看用戶手冊第五章啟動順序
將bl1、bl2、u-boot.bin弄到一起燒寫到sd卡或者emmc上
bl1--》bl2---》u-boot.bin
使用CodeSign4SecureBoot/build.sh來進行編譯
現象:燈一閃一閃的?
分析:可能是看門狗引起的,所以關閉看門狗
#if 1 /*for close watchdog */
/* PS-Hold high */
ldr r0, =0x1002330c
ldr r1, [r0]
orr r1, r1, #0x300
str r1, [r0]
ldr r0, =0x11000c08
ldr r1, =0x0
str r1, [r0]
/* Clear MASK_WDT_RESET_REQUEST */
ldr r0, =0x1002040c
ldr r1, =0x00
str r1, [r0]
#endif
現象:串口沒有輸出
時鐘初始化:串口初始化代碼沒問題,串口時鐘有問題
ldr r0, =0x10030000
ldr r1, =0x666666
ldr r2, =CLK_SRC_PERIL0_OFFSET
str r1, [r0, r2]
ldr r1, =0x777777
ldr r2, =CLK_DIV_PERIL0_OFFSET
str r1, [r0, r2]
把90行bl tzpc_init屏蔽掉
|