S5P6818 通過SD卡啟動裸機程式

2021-10-22 14:39:24 字數 1860 閱讀 2281

大概分成兩種:1)在uboot模式下,使用go直接跳轉到程式鏈結的位址來跑程式。

2)製作sd啟動卡,在sram中把整個啟動過程需要做的事情,例如初始化pll等做一遍,再去跳轉到sdram(即ddr)中鏈結的位址那裡跑程式

區別是:如果對新手來說,使用第一種方式,相對來說比較簡單方便,但是不利於了解整個啟動過程是怎麼個流程的,只能通過觀察外設的一些現象,變化來知道自己的程式有沒有跑成功。但使用第二種方式的話,就能更加深入了解到裸板的整個啟動過程:上電 -> irom -> nsih -> 2nboot ->使用者程式.bin。其實這個使用者程式.bin對於跑上linux的板子來說就相當於uboot,跑上linux核心的啟動過程:上電 -> irom -> nsih -> 2nboot ->uboot -> linux kernel。

通過資料手冊可以知道,從sd卡的第二個扇區(對程式設計師來說是第乙個,原因***,1前面還有0)開始複製56kb的資料到內部iram中執行,在下面的操作中,我在這56kb的空間裡進行了系統環境的配置和初始化,即執行nsih和2nboot的內容,然後把使用者程式複製到sdram中,pc指標跳轉到dram中程式的鏈結位址(0x40000000)處開始執行使用者程式。

通過arm-linux-gcc、arm-linux-ld、arm-linux-objcopy等交叉編譯得到.bin程式,其中使用arm-linux-ld鏈結時需要自己編寫乙個鏈結指令碼.lds,鏈結到板子的sdram(0x40000000)中執行使用者程式,因為我的板子的dram範圍是0x40000000-0x80000000,共1gb,每個板子都不一樣的,具體要去查一下。

使用mk6818把nsih和2nboot加入到使用者程式.bin裡面,製作出乙個包含初始化內容的.bin。

sudo ./mk6818 xx.bin(最終.bin) nsih.txt 2ndboot ***.bin(使用者程式.bin)。

其實nish和2nboot裡面的東西就是製作中斷向量表、pll初始化、各種外設時鐘初始化、ddr配置等內容,都是一些系統環境的配置。

mk6818是乙個用c寫的乙個可執行檔案,它的作用就是把上面提到的3個檔案製作成乙個最終的.bin檔案,其中裡面有段**是關於引導的程式啟動位址的,需要把它改為板子的sdram位址

首先使用fdisk把sd卡重新分割槽,然後使用mkfs格式化成fat32的型別,最後燒寫.bin到sd卡

sudo ./6818-sdmmc.sh /dev/sdc xx.bin(最終.bin)

6818-sdmmc.sh是乙個燒寫的shell指令碼,作用就是把最終的.bin檔案(在帶有linux核心的板子中又叫引導映象檔案即uboot)燒寫到sd的扇區中。

//xboot即原始檔xx.bin,dev即sd卡裝置檔案sdc,bs=512指定乙個塊的大小為512byte,seek=1從sd卡裝置檔案的第乙個塊開始寫入,因為第0個塊是關於sd的一些引導資訊,千萬不能修改,conv=sync每個塊都填充512個byte,不足以null字元補齊。

Android5 1 s5p6818平台鎖屏去除

android5.1下鎖屏和之前的有差別,專案需求首先要把鎖屏去掉。在原始碼的frameworks目錄下進行配置和修改 frameworks base packages settingsprovider res valuse defaults.xml。在裡面找到 true,初始值為false,將其修...

ARM 2 s5p6818板 ARM核中的暫存器

bit位 標誌釋意31n 運算結果是否為負數 如果為負數n 1 反之n 0 5 8會導致n 1 負或小於negative30z 運算結果是否為0,為0 z 1 反之z 0 例如 5 5 會導致z 1 零zero29c 最高位有進製或者借位,0xfffffffc 13 會導致 c 1 有進製或借位擴充...

opencv筆記5 通過HSV進行顏色分離

通常是以rgb格式儲存,難以分離出顏色,可以轉換到hsv空間進行顏色分離。自wiki hsl和hsv 也叫hsb 是對rgb 色彩空間中點的兩種有關係的表示,它們嘗試描述比 rgb 更準確的感知顏色聯絡,並仍保持在計算上簡單。h指hue 色相 s指saturation 飽和度 l指lightness...