read me
一、功能
1.硬體初始化
2.延時判斷載入作業系統,按任意鍵bootloader shell
3.載入作業系統
4.shell
三、檔案結構
1.led_s.s 程式入口,負責硬體初始化,bootloader自搬移
2.uart0.c uart.h 串列埠驅動的實現
3.main.c 進入bootload延時選擇載入作業系統還是進入shell
4.my_printf.c my_printf.h 封裝printf函式的實現
5.my_stdio.h my_stdio.c 標準輸入輸出函式的實現
6.my_shell.c my_shell.h shell命令的實現
7.copy_myself.c bootloader自拷貝函式
8.led.c led.h led燈的測試函式
9.beep.s 測試蜂鳴器及七段數碼管函式
10.xmodem.h xmodem.c xmodem協議實現
11.beep_os.s 模擬作業系統
12.makefile
四、流程及設計思想
1.硬體初始化
2.bootloader自搬移
3.延時,判斷是否有輸入
4.(1)無輸入則載入作業系統,作業系統燒寫於nand flash的第0塊
(2)有輸入則進入shell命令模式
5.解釋命令,使用自己實現的標準庫函式來匹配輸入的命令
6.匹配函式,定義了乙個包含字元指標以及函式指標的結構體,可以通過對應關係迅速呼叫命令對應的函式
五、測試條件及結果
1. 開啟超級終端,給開發板上電,超級終端上列印提示資訊
2. 超級終端上開始5秒倒計時,5秒內不動鍵盤,提示載入作業系統
3. 重啟開發板,3秒內按下任意鍵,可看到有welcome#提示符,程式進入shell模式
4. 輸入help,可看到5條命令的使用方法
5. 輸入led_test 可看到跑馬燈
6. 輸入beep_test 可聽到蜂鳴器響3次
7. 輸入xmodem,傳送檔案 測試xmodem/interrupt.bin
8. 輸入flash_load 0x32000000 可看到記憶體位址中的資料
9. 輸入go 0x32000000 可觀察到七段數碼管1——f迴圈顯示及蜂鳴器響
六、函式及功能
1.uart0.h
int uart0_init(void); 初始化串列埠
char uart0_getchar(void); 從鍵盤接收乙個字元
void uart0_putchar(char ch); 列印乙個字元從終端輸出
int uart0_test(void); 在終端現在鍵盤輸入
2.my_stdio.h
void my_gets(char *str); 接收乙個字串,並設定退格及回退後的字元不賦值給字串
char my_getchar(void); 重寫uart0_getchar
int my_putchar(char ch); 重寫uart0_putchar
3.command.h
void command(char *str,char *s2); 命令解析,將命令和引數分開。
4.go.h
void go(char *s2); 將得到的引數轉化成十六進製制,並在些函式下呼叫go(temp)給pc賦值
以實現調轉go 命令
5.flash_load.h
void flash_load(char *s2); 將得到的引數轉化成十六進製制,
my_printf("%x/n",*(unsigned int *)temp);得到記憶體位址中的資料
6.my_shell.h
void my_shell(void); 所有的shell命令 呼叫,都在這裡來呼叫。
7.led.h 跑馬燈的實現
8.help.h 在help.c中呼叫my_printf 來輸入字串
9.協議xmodem.h 及 輸出my_printf.h 均是移植的
bootload啟動核心
bootloader 將核心和檔案系統載入記憶體 linux 核心 linux 核心由記憶體管理 程序管理 裝置驅動程式 網路管理等組成,它是作業系統的核心,具有很多最基本的功能,決定了系統的效能和穩定性。使用者空間的檔案系統用來提供管理系統的各種配置,提供相應的應用程式 服務 資料交換等。檔案系統...
STM32F407 bootload 程式測試
stm32f407 bootload 程式測試 最近產品需要上遠端公升級功能,那麼微控制器肯定要用bootload了。初步設計方法為先用原子的程式作為基礎版,採用串列埠公升級的方式進行除錯,基本配置如下 1 iap程式的配置 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如...
作業系統筆記(二)Bootload載入ELF檔案
ctime 2020 04 29 15 34 46 0900 1588142086 標籤 空格分隔 技術 作業系統 elfhdr的位址是 0x10000,僅僅是乙個暫存位址。elf檔案的檔案頭格式 struct elfhdr 乙個elf檔案中分為好幾個段,程式段 資料段等,每個資料段的定義 stru...