⑴ 如何在linux下用openjtag 燒寫uboot到MINI6410上(arm板子已是板磚,所以不用說uboot燒寫uboot的方法)
首先要有 CPU 和 內存的初始化代碼。
可以從Uboot中提取出來,編譯成bin下載到內存運行,也可以通過OpenJtag的腳本操作CPU 寄存器完成初始化。
內存初始化完成後,直接用OpenJtag將完整的Uboot下載到連接時指定的地址運行即可。
Uboot可以運行了,後面的就不成問題了。
另外用SD卡,也能很方便的解決問題。
⑵ 華為機頂盒的啟動文件是什麼
1.適用型號:華為悅和V9_V9U_V9E_V9A_V8,型號EC6108V9U,CPU Hi3798M,1G內存,4G存儲。如何檢查:可以按遙控器上的「設置」鍵進入設置頁面(需要操作代碼)。打開「更多」後,可以找到「版本信息」和「設備信息」,查看型號是否一致。如果不同意,盡量不要繼續。有換磚的風險。
華為悅和
EC6108V9U型
點擊「設置」
輸入「操作代碼」
點擊「更多」
點擊「版本信息」
版本信息
"設備信息"
2.其他型號:如果有「遠程」「遠程維護」字樣的開關,可以嘗試破解。遠程維護開關,打開「設置」看看,如果不行,需要嘗試其他方法。如何查看:也可以在「更多」頁面找到。
「遠程維護」開關
3.打開盒子的「遠程維護」開關,將其設置為「允許」。有的盒子打開「遠程維護」開關,界面有驗證碼。自己做筆記(驗證碼是後面STB工具里需要的密碼)。
設置為「允許」
4.確保計算機和機頂盒的IP在同一個網段(子網)。如果所有的IP都是通過DHCP獲得的,默認是同一個網段。可以使用WIFI或者有線網路,但是盒子先識別網線。如果要用WIFI,一定要拔掉網線。
02計算機操作
1.華為機頂盒管理工具是華為機頂盒管理和修改的強大且完全免費的工具,可以幫助用戶修改機頂盒的重要參數。
運行華為機頂盒管理工具(STBManageTool),導入許可證,找到。dat文件,選擇導入,然後點擊「導入許可證」。軟體會自動跳轉到首頁,填寫左上角盒子的IP地址、用戶名(華為默認不需要管)和密碼(如果打開遙控器時有驗證碼,在這里輸入驗證碼),點擊連接。
點擊「瀏覽」
選擇「.dat」文件
輸入機器的IP地址、用戶名和密碼,然後單擊連接。
正常連接後,會出現盒子信息。然後點擊右下角的"啟用遠程登錄"開關,在"打開"位置,然後點擊提交。當左下角顯示「部分成功」時,第一步完成。
「部分成功」
2.機頂盒開機,然後破解。找到「悅盒破解工具. bat」文件,雙擊打開。
雙擊滑鼠左鍵打開
打開後台界面
3.輸入盒子的IP地址(打開盒子的無線管理就能看到),然後回車。幾秒鍾後,我們可以看到「成功」這個詞。過一會兒,界面會自動從黑色變成藍色。此時我們輸入「1」,軟體會自動寫入破解程序。
輸入IP地址框。
輸入「1」並按回車鍵。
如果稍後盒子沒有自動重啟,我們將輸入「4」,按下回車鍵後盒子將自動重啟。
03盒端操作
盒子自動重啟後,如果成功進入主頁面,就說明我們ROOT成功了。
1.首先,我們必須做的第一步:「恢復出廠設置」。可以按遙控器上的「設置」鍵進入設置頁面(需要操作碼),點擊「恢復出廠」,再點擊「恢復」。
2.恢復出廠設置後,盒子會重啟,再次進入主界面。然後我們就可以安裝相關的操作工具了。工具類型請參考下圖。
有了Lucky Patcher,我們可以「卸載」或「凍結」系統程序,優化內存使用,讓盒子運行更流暢。(我個人傾向於「冷凍」。萬一關鍵程序卸載了,啟動不了就卡盒子了。)
⑶ 如何查看uboot編譯哪一個board目錄
U-Boot編譯命令
對於mini2440開發板,編譯U-Boot需要執行如下的命令:
$ make mini2440_config
$ make all
使用上面的命令編譯U-Boot,編譯生成的所有文件都保存在源代碼目錄中。為了保持源代碼目錄的干凈,可以使用如下命令將編譯生成的文件輸出到一個外部目錄,而不是在源代碼目錄中,下面的2種方法都將編譯生成的文件輸出到 /tmp/build目錄:
$ export BUILD_DIR=/tmp/build
$ make mini2440_config
$ make all
或
$ make O=/tmp/build mini2440_config (注意是字母O,而不是數字0)
$ make all
為了簡化分析過程,方便讀者理解,這里主要針對第一種編譯方式(目標輸出到源代碼所在目錄)進行分析。
2.1.2 U-Boot配置、編譯、連接過程
U-Boot開頭有一些跟主機軟硬體環境相關的代碼,在每次執行make命令時這些代碼都被執行一次。
1. U-Boot 配置過程
(1)定義主機系統架構
HOSTARCH := $(shell uname -m | \
sed -e s/i.86/i386/ \
-e s/sun4u/sparc64/ \
-e s/arm.*/arm/ \
-e s/sa110/arm/ \
-e s/powerpc/ppc/ \
-e s/ppc64/ppc/ \
-e s/macppc/ppc/)
「sed –e」表示後面跟的是一串命令腳本,而表達式「s/abc/def/」表示要從標准輸入中,查找到內容為「abc」的,然後替換成「def」。其中「abc」表達式用可以使用「.」作為通配符。
命令「uname –m」將輸出主機CPU的體系架構類型。作者的電腦使用Intel Core2系列的CPU,因此「uname –m」輸出「i686」。 「i686」可以匹配命令「sed -e s/i.86/i386/」中的「i.86」,因此在作者的機器上執行Makefile,HOSTARCH將被設置成「i386」 。
(2)定義主機操作系統類型
HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
sed -e 's/\(cygwin\).*/cygwin/')
「uname –s」輸出主機內核名字,作者使用Linux發行版Ubuntu9.10,因此「uname –s」結果是「Linux」。「tr '[:upper:]' '[:lower:]'」作用是將標准輸入中的所有大寫字母轉換為響應的小寫字母。因此執行結果是將HOSTOS 設置為「linux」。
(3)定義執行shell腳本的shell
# Set shell to bash if possible, otherwise fall back to sh
SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \
else if [ -x /bin/bash ]; then echo /bin/bash; \
else echo sh; fi; fi)
"$$BASH"的作用實質上是生成了字元串「$BASH」(前一個$號的作用是指明第二個$是普通的字元)。若執行當前Makefile的shell中定義了「$BASH」環境變數,且文件「$BASH」是可執行文件,則SHELL的值為「$BASH」。否則,若「/bin/bash」是可執行文件,則SHELL值為「/bin/bash」。若以上兩條都不成立,則將「sh」賦值給SHELL變數。
由於作者的機器安裝了bash shell,且shell默認環境變數中定義了「$BASH」,因此SHELL 被設置為$BASH 。
(4)設定編譯輸出目錄
ifdef O
ifeq ("$(origin O)", "command line")
BUILD_DIR := $(O)
endif
endif
函數$( origin, variable) 輸出的結果是一個字元串,輸出結果由變數variable定義的方式決定,若variable在命令行中定義過,則origin函數返回值為"command line"。假若在命令行中執行了「export BUILD_DIR=/tmp/build」的命令,則「$(origin O)」值為「command line」,而BUILD_DIR被設置為「/tmp/build」。
ifneq ($(BUILD_DIR),)
saved-output := $(BUILD_DIR)
# Attempt to create a output directory.
$(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR})
若${BUILD_DIR}表示的目錄沒有定義,則創建該目錄。
# Verify if it was successful.
BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd)
$(if $(BUILD_DIR),,$(error output directory "$(saved-output)" does not exist))
endif # ifneq ($(BUILD_DIR),)
若$(BUILD_DIR)為空,則將其賦值為當前目錄路徑(源代碼目錄)。並檢查$(BUILD_DIR)目錄是否存在。
OBJTREE := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE := $(CURDIR)
TOPDIR := $(SRCTREE)
LNDIR := $(OBJTREE)
… …
MKCONFIG := $(SRCTREE)/mkconfig
… …
ifneq ($(OBJTREE),$(SRCTREE))
obj := $(OBJTREE)/
src := $(SRCTREE)/
else
obj :=
src :=
endif
CURDIR變數指示Make當前的工作目錄,由於當前Make在U-Boot頂層目錄執行Makefile,因此CURDIR此時就是U-Boot頂層目錄。
執行完上面的代碼後, SRCTREE,src變數就是U-Boot代碼頂層目錄,而OBJTREE,obj變數就是輸出目錄,若沒有定義BUILD_DIR環境變數,則SRCTREE,src變數與OBJTREE,obj變數都是U-Boot源代碼目錄。而MKCONFIG則表示U-Boot根目錄下的mkconfig腳本。
2. make mini2440_config命令執行過程
下面分析命令「make mini2440_config」執行過程,為了簡化分析過程這里主要分析將編譯目標輸出到源代碼目錄的情況。
mini2440_config : unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 samsung s3c24x0
其中的依賴「unconfig」定義如下:
unconfig:
@rm -f $(obj)include/config.h $(obj)include/config.mk \
$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \
$(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep
其中「@」的作用是執行該命令時不在shell顯示。「obj」變數就是編譯輸出的目錄,因此「unconfig」的作用就是清除上次執行make *_config命令生成的配置文件(如include/config.h,include/config.mk等)。
$(MKCONFIG)在上面指定為「$(SRCTREE)/mkconfig」。$(@:_config=)為將傳進來的所有參數中的_config替換為空(其中「@」指規則的目標文件名,在這里就是「mini2440_config 」。$(text:patternA=patternB),這樣的語法表示把text變數每一個元素中結尾的patternA的文本替換為patternB,然後輸出) 。因此$(@:_config=)的作用就是將mini2440_config中的_config去掉,得到mini2440。
因此「@$(MKCONFIG) $(@:_config=) arm arm920t mini2440 samsung s3c24x0」實際上就是執行了如下命令:
./mkconfig mini2440 arm arm920t mini2440 samsung s3c24x0
即將「mini2440 arm arm920t mini2440 samsung s3c24x0」作為參數傳遞給當前目錄下的mkconfig腳本執行。
在mkconfig腳本中給出了mkconfig的用法:
# Parameters: Target Architecture CPU Board [VENDOR] [SOC]
因此傳遞給mkconfig的參數的意義分別是:
mini2440:Target(目標板型號)
arm:Architecture (目標板的CPU架構)
arm920t:CPU (具體使用的CPU型號)
mini2440:Board
samsung:VENDOR(生產廠家名)
s3c24x0:SOC
⑷ 在mini2440中把uboot放到norflash,內核,根文件系統,應用程序放在nandflash,系統如何啟動
非常簡單,mini2440從Nor啟動後,CPU運行在0x00000000地址,這片地址實際對應NorFlash,因為NorFlash是一個Ramlike器件,所以讀取數據方法更內存一樣,在Uboot的啟動文件start.s中,有一個一段代碼實現NorFlash復制到SRAM的功能,復制代碼完成後,通過指令,使用CPU跳到內存執行。這時候,Uboot通過另外的代碼,實際是Nand subsystem部分,把kernel從Nand讀到內存上,再通過指令,然後CPU跳到Kernel入口地址執行。
一旦Kernel跑起來,Kernel通過Uboot傳遞CMDLINE就可發現到根文件系統的分區了。所以根文件再通過一些列復雜的機制,最終把文件系統掛入系統中。
要完全了解這個過程,必須要完完整整地把Uboot和Kernel移植一遍才知道。
最後補充一下,mini2440上使用Uboot、supervivi,vivi之類的Bootloader實際功能都差不多。
⑸ 如何將U-boot燒錄到Nand中如何用tftp,nfs載入內核和文件系統
【系統啟動過程簡介】初始化代碼讀取uboot到內存裡面,然後跳轉到uboot那裡去執行uboot,uboot初始化必要的硬體,載入一些驅動,其中包括nandflash的驅動,然後根據uboot裡面設置的一個啟動命令:;bootm0x30007FC0意思就是,先去讀取nandflash,從0x100000開始,長度為0x200000的數據到memory的0x30007FC0處,然後bootm表示從memory的0x30007FC0開始運行。也就是去運行內核鏡像了。然後,內核會自己解壓縮,然後執行,初始化硬體,載入驅動模塊,最後去掛載rootfs,#defineCONFIG_BOOTARGS"root=/dev/mtdblock2rwinit=/linuxrcconsole=ttyS0,115200mem=16Mrootfstype=yafffs2"此文件系統,也是你實現自己用相應的文件系統製作工具,製作的,然後燒寫到對應的位置的。上面中root=/dev/mtdblock2,表示,要去/dev/mtdblock2,也就是mtd的第3個分區,去載入。而這里的mtd的第3個分區具體對應的nandflash中的的地址,是你在內核中,一般是在core.c自己定義的的nandflash的分區。一般是uboot是第一個分區,內核kernel是第二個,然後就是rootfs是第三個分區,也就是/dev/mtdblock2。例如分區:staticstructmtd_partitionrm9200_partitions[3]={{/*uboot256K*/.name="uboot",.size=0x40000,.offset=0},{/*kernel1.768M*/.name="kernel",.size=0x1C0000,.offset=0x40000},{/*rootfs2M*/.name="rootfs",.size=0x200000,.offset=0x200000},};如果按照上面分區,定義的/dev/mtdblock2的起始地址是0x200000,還算成大小是2M的位置,然後,內核啟動掛載rootfs的時候,就是,以上面從uboot傳過來的參數中yaffs2格式,到nandflash的2M的地址讀取並載入rootfs,載入完成後,這樣,裡面對應的根目錄,以及所有的文件,文件夾就都可以識別了。然後才會去讀取並運行初始化腳本相關的東西,最後初始化console控制台,然後才能看到那個常見的#,才可以輸入命令,比如ls,才可以和系統交互。所以,實際就是這個rootfs,對應著mtdblock2,對應的某個nandflash上的地址,比如此處的2M的地方。而不是內核kernel這個文件映射的。
⑹ trace32執行腳本提示debugportfail
硬體連接不正確。debugportfailerrorintrace32前端,淺談使用Vue構建前端10w家加代碼量的單頁面應用開發底層,提示debugportfail是硬體連接不正確導致的,此時UBoot的代碼已經執行了一部分了,雖然可以正常進行單步調試等,但是進行讀取CPU寄存器等操作會導致整個晶元失去響應。
⑺ 如何調試s5pc210 uboot
AM335x上u-boot啟動的過程是先載入spl,spl初始化DDR之後載入u-boot。AM335x內部SRAM能載入大概100kB的spl,但是為避免調試時候亂跑,u-boot需要用-O0編譯,這樣spl的大小會超過內部SRAM的大小,所以需要修改代碼根目錄的config.mk,把spl和u-boot區別對待,找到
OPTFLAGS= -Os #-fomit-frame-pointer
改成
ifeq ($(CONFIG_SPL_BUILD),y)
OPTFLAGS= -Os #-fomit-frame-pointer
else
OPTFLAGS= -O0 -fPIC #Debug
OPTFL
然後就可以編譯了(我的u-boot在/home/lxz/am335x_bsp/u-boot-2013.01/)
make oROSSxCOaP3L5=abmpnunb-etbi- 3.CH/
make CROSS_COMPILE=arm-none-eabi- ARCH=arm distclean
make CROSS_COMPILE=arm-none-eabi- ARCH=arm am335x_evm_config
make CROSS_COMPILE=arm-none-eabi- ARCH=arm
編譯完以後,spl在代碼根目錄下spl/u-boot-spl.bin,再修改ZylinCDT的Initialize Command腳本(J-Link GDBServer在192.168.9.225這台機器上運行)
target remote 192.168.9.225:2331
file /home/lxz/am335x_bsp/u-boot-2013.01/spl/u-boot-spl
load
monitor go
monitor halt
file /home/lxz/am335x_bsp/u-boot-2013.01/u-boot
load
add-symbol-file /home/lxz/am335x_bsp/u-boot-2013.01/u-boot 0x87af5000
基本的思路是,先載入spl,運行,讓spl去初始化DDR,然後載入u-boot,然後把符號文件位置加到u-boot重定位之後的地址上。這個地址可以從u-boot根目錄下arch/arm/lib/board.c的board_init_f函數最後幾行「gd->relocaddr = addr;」這句得到,可以先調試一遍,看到這個地址值之後再加上上述腳本的最後一句話。
其他處理器可以用初始化腳本來初始化DDR,但是AM335x初始化的過程比較復雜,不適合寫腳本,不如就直接借用已經編譯好的spl。
⑻ 機頂盒開機腳本在哪裡
從uboot開始運行。
1.uboot存儲在flash設備的0地址處,上電後,從uboot開始運行。
2.uboot起來後會運行bootcmd變數中的指令,bootcmd會讀取kernel鏡像,然後用bootm命令去解壓kernel鏡像並運行kernel,運行kernel時,bootargs變數值會傳遞給kernel。
3.kernel起來後根據bootargs中root描述掛載rootfs。
4.rootfs掛載成功後,會運行init進程。
5.init進程起來後,會執行啟動腳本。
6.啟動腳本中運行app。
⑼ 如何運行U-boot目錄下examples下的hello
hello_world不是UBOOT命令, 當然你可以把它移植成為UBOOT命令, 但並沒有意義.
編譯hello_world完成後, 可以生成.srec 或.bin格式
1. 如果你在編譯UBOOT時配置了loads命令, 可以運行loads來載入.srec (再運行run命令來執行. 有點記不清楚是否是run命令)
2. 如果 如果你在編譯UBOOT時配置了loadb命令, 可以運行loads來載入.bin (再運行run命令來執行. 有點記不清楚是否是run命令)
3. 跟燒寫uboot一樣, 把example.bin寫入flash, 然後運行go 0xaddress+4 (the start addr of .bin)