1. 程式人生 > >第一章——2440及4412燒寫程式碼

第一章——2440及4412燒寫程式碼

JZ2440

JZ2440有nor flash和nand flash,可以nor啟動和nand啟動,我習慣把nor中燒入u-boot,平時實驗用nand。可以用如下命令在nor中的u-boot對nand進行燒寫

tftp 30000000 u-boot.bin ; nand erase bootloader ; nand write 30000000 bootloader
用tftp時PC機上要啟動tftp服務軟體,或者用nfs直接從伺服器下載
nfs 30000000 10.5.202.10:/work/nfs_root/boot.bin ; nand erase bootloader ; nand write 30000000 bootloader

燒寫核心和檔案系統同理

關於分割槽可以在u-boot下輸入命令mtd檢視,這是在u-boot程式碼中寫的,可以自行修改,但是為了與核心一致一般為

 #: name                size            offset       mask_flags
 0: bootloader          0x00040000      0x00000000      0
 1: params              0x00020000      0x00040000      0
 2: kernel              0x00200000      0x00060000      0
 3: root                0x0fda0000      0x00260000      0

傳到記憶體的資料為什麼存到30000000這個位置呢??這就要看u-boot的記憶體分佈


我們往記憶體中傳資料的時候只要不破壞uboot的資料就可以了,由記憶體分佈圖發現0x30000000是個不錯的選擇


tiny4412

tiny4412可以eMMC啟動和SD啟動,由於友善之臂的uboot for tiny4412沒有支援網絡卡,fastboot和superboot不開源,所以一般用dnw或用linux指令碼燒寫SD卡

網路燒寫

uboot for tiny4412沒有支援網絡卡,這讓用網路除錯的人情何以堪

dnw燒寫

8 格式化eMMC, u-boot模式下輸入如下指令來格式化eMMC裝置。
>fdisk -c 1 320 2057 520
執行後會返回分割槽資訊,繼續格式話分割槽1,2,3,4
>fatformat mmc 1:1
這句話意思是對mmc 1裝置的第一分割槽格式作fat格式化。
>ext3format mmc 1:2
>ext3format mmc 1:3
>ext3format mmc 1:4
上面三個指令是分別對eMMC的分割槽2,3,4作ext3格式化。

到此我們完成了對eMMC的裝置的格式化。

接下來我們要想辦法燒錄bl1.bin, bl2.bin, u-boot.bin, tzsw.bin燒錄到eMMC中。

9 從PC端下載韌體到開發板Memory中。
剛才我們重點介紹了dnw, 接下來我們要使用此工具來下載韌體到開發板記憶體中。注意是下載到記憶體,把韌體資料快取起來,到時要燒錄到eMMC中。
首先我們要開啟emmc裝置
u-boot下輸入:
>emmc open 1
eMMC OPEN Success.!!
                        !!!Notice!!!
!You must close eMMC boot Partition after all image writing!
!eMMC boot partition has continuity at image writing time.!
!So, Do not close boot partition, Before, all images is written.!
上面提示emmc開啟成功,注意說明,emmc一旦開啟,需要連續燒錄,燒錄完成後可以關閉emmc.

10 接下來我們要執行dnw
u-boot下面輸入:
>dnw
OTG cable Connected!
Now, Waiting for DNW to transmit data
提示等待資料輸入,這裡就是等待我們從PC端通過DNW傳送資料過來。

此時在PC端終端串列埠,cd到u-boot目錄所在路徑
[email protected]
~/u-boot/: 輸入: dwn sd_fuse/tiny4412/E4412_N.bl1.bin 此時u-boot中斷會提示傳送校驗完成,此時已經把bl1.bin通過USB傳送到了memeory的0xc0000000起始地址,大小8KB. 接下來我們燒錄bl1.bin到eMMC中,u-boot下繼續輸入: >mmc write 1 0xc0000000 0 0x10 會提示寫入資訊,說明已經寫入成功。這個是把剛才從PC端通過dnw下載下來的bl1.bin韌體下載到emmc中,起始0, 16個block, 一個block是512B, 16*512=8*1024=8KB. 這個是bl1.bin的存放位置。 以此類推,燒錄bl2.bin. u-boot.bin, tzsw.bin ----------------------------------------------------------------------------------------------------------------------------------------------------- u-boot終端繼續輸入: >dnw PC端輸入: (注意輸入內容是以 dnw 開始的,前面是當前路徑,便於理解) [email protected]~/u-boot/: dwn sd_fuse/tiny4412/bl2.bin u-boot下繼續輸入: >mmc write 1 0xc0000000 0x10 0x1C bl2.bin實際大小約14K,分配的空間是16K. 其實是第16個block開始,寫入28個block, 28*512B=14*1024=14K 注意這個區域預分配是32個Block,所以下一個開始是32+16=48 ------------------------------------------------------------------------------------------------------------------------------------------------------ u-boot終端繼續輸入: >dnw PC端輸入: (注意輸入內容是以 dnw 開始的,前面是當前路徑,便於理解) [email protected]~/u-boot/: dwn u-boot.bin u-boot下繼續輸入: >mmc write 1 0xc0000000 0x30 0x21D u-boot.bin實際大小約270K,分配的空間是328K. 其實是第48個block開始,寫入541個block, 541*512B=270.5*1024 約270K ------------------------------------------------------------------------------------------------------------------------------------------------------ u-boot終端繼續輸入: >dnw PC端輸入: (注意輸入內容是以 dnw 開始的,前面是當前路徑,便於理解) [email protected]~/u-boot/: dwn sd_fuse/tiny4412/E4412_tzsw.bin u-boot下繼續輸入: >mmc write 1 0xc0000000 0x2c0 0xB8 tzsw.bin實際大小約92K,分配的空間是160K. 其實是第704個block開始,寫入184個block, 184*512=92*1024=92K ------------------------------------------------------------------------------------------------------------------------------------------------------ 啟動分割槽到此全部寫入完成,注意一定要關閉emmc, u-boot下繼續輸入: >emmc close 1 eMMC CLOSE Success.!! 關閉emmc裝置,提示關閉成功。此時我們已經把啟動檔案全部燒錄到了eMMC中。 ------------------------------------------------------------------------------------------------------------------------------------------------------- 接下來我們可以把開發板的SW2撥動到NAND啟動,同時u-boot中斷輸入reset, 並在電腦鍵盤按下任意鍵,此時我們可以看到: +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ U-Boot 2010.12-00000-g3e284d5-dirty (Jul 04 2014 - 17:40:58) for TINY4412 CPU: S5PC220 [Samsung SOC on SMP Platform Base on ARM CortexA9] APLL = 1400MHz, MPLL = 800MHz Board: TINY4412 DRAM: 1023 MiB vdd_arm: 1.2 vdd_int: 1.0 vdd_mif: 1.1 BL1 version: N/A (TrustZone Enabled BSP) Checking Boot Mode ... EMMC4.41 REVISION: 1.1 MMC Device 0: 3728 MB MMC Device 1: 1876 MB MMC Device 2: N/A Read... Bootmode reg 0x00000000 Get Bootmode reg 0xf3ca4c36 ModeKey Check... run normal_boot Net: No ethernet found. Hit any key to stop autoboot: 0 TINY4412 # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 大功告成啊,我們的u-boot已經成功寫入到了eMMC中,並可以成功啟動。


linux指令碼燒寫SD卡

主要是下面四條命令
dd iflag=dsync oflag=dsync if=./E4412_N.bl1.bin of=$1 seek=1  
dd iflag=dsync oflag=dsync if=./bl2.bin         of=$1 seek=17  
dd iflag=dsync oflag=dsync if=../../u-boot.bin  of=$1 seek=49  
dd iflag=dsync oflag=dsync if=./E4412_tzsw.bin  of=$1 seek=705
E4412_N.bl1.bin為廠家自帶,傳說中的bl1
bl2.bin為u-boot的14位元組加上校驗碼,傳說中的bl2,主要作用是把u-boot.bin讀到記憶體
u-boot.bin這才是主體
E4412_tzsw.bin為廠家自帶,從名字上看是關於trustzone的,不去理會

fastboot燒寫SD卡

README for FriendlyARM Tiny4412

說明:本u-boot原始碼由三星原廠提供,並由友善之臂修改移植,以適用於Tiny4412開發板平臺。
僅供嵌入式愛好者學習研究之用,友善之臂不對此提供任何技術支援和維護。

-----------------------------------------------------
1. Build uboot

a) 安裝好toolchain (arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz)並設定好
   環境變數PATH,保證可以正常使用。

b) 解壓 uboot_tiny4412-20130729.tgz 並進入相應的目錄
   tar xzf uboot_tiny4412-20130729.tgz

c) 配置 uboot 並編譯
   cd uboot_tiny4412
   make tiny4412_config
   make

d) 編譯 用於生成bl2 的工具
   make -C sd_fuse
   或者
   cd sd_fuse; make


-----------------------------------------------------
2. 製作啟動 Tiny4412 的SD卡

a) 先準備一張4G或以上的SDHC卡
   注意:該卡的已有資料將會被破壞,因此請先對SD卡上的資料進行備份。

b) fusing SD card
   假設SD卡已被PC Linux識別為/dev/sdb, 以root使用者執行以下命令即可:
   cd sd_fuse/tiny4412
   ./sd_fusing.sh /dev/sdb


-----------------------------------------------------
3. 使用SD卡啟動 Tiny4412 並燒寫Android

a) 將已經制作好的SD卡插到 Tiny4412 板上,撥動S2切換到SDBOOT,同時連線
   串列埠線到PC且假設已經準備好。

b) 開發板加電,然後在串列埠控制檯(如minicom),按任意鍵進入uboot 命令列模式

c) 對SD卡進行分割槽
   輸入以下uboot命令即可對SD卡進行分割槽:
   fdisk -c 0 320 806 518
   重新分割槽後,可重新格式化FAT分割槽
   fatformat mmc 0:1

d) 進入fastboot模式以燒寫Android
   使用USB線連線Tiny4412的MICRO_USB口到PC,然後輸入以下uboot命令:
   fastboot

e) 燒寫 Android 到SD卡
   首先請準備好Android image,包括: zImage, ramdisk-u.img, system.img
   在PC端輸入以下命令進行燒寫:
	fastboot flash kernel zImage              (燒寫kernel)
	fastboot -w                               (格式化userdata和cache)
	fastboot flash ramdisk ramdisk-u.img      (燒寫ramdisk)
	fastboot flash system system.img          (燒寫system)

f) 也可以在PC端通過fastboot燒寫uboot到SD卡
   先手動生成bl2.bin
   cd sd_fuse/tiny4412
   ../mkbl2 ../../u-boot.bin bl2.bin 14336

   然後輸入以下命令:  
	fastboot flash fwbl1 E4412_N.bl1.bin
	fastboot flash bl2 bl2.bin
	fastboot flash bootloader ../../u-boot.bin
	fastboot flash tzsw E4412_tzsw.bin 


-----------------------------------------------------
4. 使用SD卡啟動 Android

a) 如果是使用HD700,則燒寫完成後直接重啟Tiny4412 即可自動啟動 Android

b) 如果是使用S700,則需要在uboot上設定kernel命令列引數:
   setenv bootargs console=ttySAC0,115200n8 androidboot.console=ttySAC0 lcd=S700
   saveenv
   然後重啟Tiny4412即可。


MiniTools工具燒寫nand

只有 Superboot 配合才能使用 MiniTools 的 USB 下載功能,並且 Superboot 需要工作在 USB 下載模式才行,因此,請先做以下準備工作:

1. 用 SD-Flasher 工具將 Superboot 燒寫到 SD 卡中。
2. 將光碟中的 images/FriendlyARM.ini 檔案拷貝到 SD 卡中的 images 目錄下。
3. 編輯 SD 卡中的 images/FriendlyARM.ini 檔案檔案, 增加以下內容:

USB-Mode = yes

做好準備工具後,按以下步驟連線 PC 和開發板:

1. 將開發板上的 S2 開關切換到 SD 卡模式
2. 上電開機,開發板將進入 USB 下載模式, LCD 上會顯示“ USB Mode: Waiting...”
3. 用 USB 線連線電腦與開發板
4. 連線成功, LCD 上會顯示"USB Mode: Connected"

至此,你可以使用 MiniTools 燒寫系統了。

SD卡離線燒寫nand

1.使用 SD-Flasher 工具燒寫 Superboot 到 SD 卡

2.將如下檔案拷入SD卡

images\Superboot4412.bin                                Bootloader
images\Linux\zImage                                     Linux Kernel 3.5
images\Linux\ramdisk-u.img                              Linux 根分割槽映象
Images\Linux\rootfs_qtopia_qt4.img                      Linux 系統分割槽映象
images\FriendlyARM.ini                                  系統燒寫配置檔案
3.修改配置檔案images\FriendlyARM.ini,內容如下
#This line cannot be removed. by FriendlyARM(www.arm9.net)
CheckOneButton=No
Action = Install
OS = Linux
LowFormat = No
VerifyNandWrite = No
LCD-Mode = No
CheckCRC32=No
StatusType = Beeper | LED
################### Linux ####################
Linux-BootLoader = Superboot4412.bin
Linux-Kernel = Linux/zImage
Linux-CommandLine = root=/dev/mmcblk0p1 rootfstype=ext4 console=ttySAC0,115200 init=/linuxrc ctp=2
Linux-RamDisk = Linux/ramdisk-u.img
Linux-RootFs-InstallImage = Linux/rootfs_qtopia_qt4.img

4.切換至nand啟動,開機自動燒寫

相關推薦

第一——24404412程式碼

JZ2440 JZ2440有nor flash和nand flash,可以nor啟動和nand啟動,我習慣把nor中燒入u-boot,平時實驗用nand。可以用如下命令在nor中的u-boot對nand進行燒寫 tftp 30000000 u-boot.bin ; nan

C++ primer 第一筆記習題

本章的Github地址:https://github.com/hwl19951007/Cpp_Primer_Exercise/tree/master/Chapter1 筆記 << 運算子為輸出運算子。接受左右兩個物件,左邊必須是一個ostream物件,右邊

【小白看的Java教程】第十五,更聰明的程式碼:方法

之前講解的迴圈操作,可以解決的是程式碼重複的問題,但是此時的重複的程式碼必須是有規律的。那迴圈操作,能解決所有的程式碼重複嗎?答案肯定是不行的,比如針對於某一種功能的重複操作,迴圈解決不了,終於方法就該登場了。舉個例子。 編寫一個飛機大戰遊戲,程式在執行過程中

【.NET Core專案實戰-統一認證平臺】第一 功能架構分析

從本文開始,我們正式進入專案研發階段,首先我們分析下統一認證平臺應該具備哪些功能性需求和非功能性需求,在梳理完這些需求後,設計好系統採用的架構來滿足已有的需求和未來的擴充套件應用。 1 功能性需求 統一認證平臺應該具備以下基本功能,本文只是拋磚引玉,我只列出後續課程會講到的相關內容的需求,不會詳細的設計功能

3、計算機網路第一習題答案

1、一條狗攜帶3盒8毫米的磁帶以18km/h的速度奔跑,每盒磁帶容量是7GB。試問在什麼距離範圍內狗的資料傳輸率會超過一條速率為150Mbps的傳輸線?在以下情況下:(1)狗的速度加倍(2)每盒磁帶容量增加(3)傳輸線路的速錄加倍,上述結果的變化。 解:150M

迅為4412

1)將需要燒寫的映象拷貝到“USB_fastboot_tool”-->“platform-tools”資料夾下面。 2)啟動開發板,進入Uboot 模式(Hit any key to stop autoboot讀秒的過程中如果輸入任何值,將進入uboot 模式)。 3)分割槽格式化,超級終端中fdisk

第一程式碼第一——你的第一行Android程式碼

第一行程式碼第一章—你的第一行Android程式碼 知識點目錄 1.1 瞭解全貌——Android王國簡介 1.1.1 Android系統架構 1.1.2 Android已釋出的版本 1.1.3 Android應用開發特色

ubuntu 4412ubuntu

Ubuntu 檔案系統有倆個,一個是支援LCD 的,也就是7 寸或者9.7寸螢幕;或者支援HDMI 顯示的。    LCD 顯示版本:iTOP4412_ubuntu_12.04_for_LCD_xxx.tar.gz    光碟目錄:“05_映象_Ubuntu 檔案系統”→“s

DSP TMS320FF28335程式從FLASH中拷貝到RAM中的兩種方法FLASH方法

程式從FLASH中拷貝到RAM中執行的方法 DSP的程式下載執行方式有兩種:一種是下載到RAM中線上執行,一種是下載到FLASH中執行。在RAM中執行時,具有執行速度快,可以無限次下載的特點,但是RAM的特點是掉電丟失資料。FLASH具有掉電不丟失資料的特點,但是同時存在執

Future三重奏第一:Future設計模式程式碼示例

Future系列文章 Future模式的作用 去除等待主函式執行某項耗時操作的等待時間,在執行主函式耗時業務操作的時候,及時返回一個數據,繼續主函式剩下的業務,當需要獲取之前耗時操作的結果的時候在進行獲取 其本質則是在維持主業務順利進行的同時,非同步的執行主業

c++ primer(第五版)學習筆記習題答案程式碼版(第一

筆記較為零散,都是自己不熟悉的知識點。 習題答案至於一個.cc中,需要執行某一題直接修改#define NUM**, 如執行第一題為#define NUM11,題1.24定義為NUM124chapter 1 1、std::cout << "Entertwo nu

Vivado下生成MCS文件

water bits == xxx mat word arw onf art Jtag模式: 1、打開Open Hardware Manager 2、 Tools ->Auto Connect 3、TCL輸入: write_cfgmem -format MCS -si

Spring實戰——如何執行第一程式碼(如何生成一個可執行的jar包)

手動建立一個目錄kni,進入kni建立一個build.gradle檔案,內容如下: apply plugin: 'java' jar { baseName = 'knight' version = '0.0.1-SNAPSHOT' } repositories

《惡意程式碼分析實戰》--第一:靜態分析基礎技術

**請參考大神的連結:https://blog.csdn.net/baidu_41108490/article/details/80298973#commentBox Lab1-1 這裡我只是記錄我的學習過程** 2、用PEtools開啟,檢視日期 .exe .dll

《用Python網路爬蟲》第一踩坑

教程使用環境為pyhon2.x,使用python3.x進行學習時遇到一些坑,記錄下解決辦法。 由於python2.x中的urllib2模組在3.x中被整合到了urllib模組中,教程中涉及urllib2的部分的程式碼需調整 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; f

NDK第一--認識NDK簡單的輸出hello world

交叉編譯 在一個平臺下,編譯出另一個平臺能夠執行的二進位制程式碼 平臺:windows,mac,os,linux 處理器:x86,arm,mips 交叉編譯的原理 原始碼–>編譯–>連線–>可執行程式 模擬其他的平臺特

安卓學習(初)第一(《第一程式碼》)

一、建立第一個安卓專案步驟: 1、在Android studio介面點選star a new Android studio project。然後在接下來的介面填入該專案的名稱、公司域名以及專案程式碼的存放地址(如果沒特殊要求一般選擇預設)。 2、再下一個介面指定Minimum SDK和選擇開

AM3358裸片程式-第一部分

1.先說下背景,公司接到一個專案,使用者制定要用TI的AM3358晶片作為控制器,並且要執行linux系統,要具備百兆和千兆的網路通訊功能、序列通訊功能、IIC功能、SPI功能和GPMC功能,之所以要這麼多功能是因為要用AM3358與另外三個FPGA進行通訊,當然DDDR3和NAND FLASH是必不可少的,

A33_Vstar_Android_SDK開發 編譯遇到的問題

A33_Vstar_Android_SDK開發 遇到的問題 整理一下Android SDK編譯及燒寫的時候,遇到的問題和解決的辦法   問題1  .tar.bz2檔案解壓命令 解決辦法:.tar.gz     格式解壓為&n

第一 Linux——系統介紹環境搭建

第一章 Linux——系統介紹及環境搭建   一、Linux簡介 二、環境搭建   一、Linux簡介 什麼是作業系統(what): 如果被問到什麼是作業系統,可能很多初學者都會一臉茫然。雖然我們都知道平時一直在用的Windows XP、Windows 7、Windows8其