最近看正點原子的linux驅動教程和linux應用教程(這個正點的linux應用教程應該是爛尾了),給自己看蒙了,記錄一下區別。
驅動程序:看到視頻都是把寫好的.c.h編譯出一個.bin,然後使用正點軟件,添加各種頭文件之後,生成一個.imx文件,然後燒錄到TF卡,imx6u設置從TF卡啓動。
應用程序:是把寫好的可運行程序複製到imx6ull中,然後./ 運行。
1、沒搞明白這兩個程序的的區別,還有就是啓動方式的區別。
2、驅動程序中的.imx文件放在了TF卡中,那麼應用程序中的可執行程序放到了哪裏?

一、比喻:建造和運營一個商場

.bin文件燒錄到TF卡並從TF卡啓動:這相當於 “建造整個商場,包括地基、主體結構、水電系統和物業管理中心”。
.bin文件(通常是uboot.imx)是啓動引導程序,它告訴硬件如何初始化,並從哪裏加載操作系統內核。
從TF卡啓動,意味着整個商場(Imx6ull系統)是建立在這張TF卡之上的。TF卡里包含了啓動引導程序(uboot)、操作系統內核(kernel)、設備樹(device tree)和根文件系統(rootfs)。系統一上電,所有的核心組件都從這張卡里讀取。

編寫程序,複製進去,然後./運行:這相當於 “商場建成後,你在裏面開一家新的奶茶店”。
你的程序就是這個“奶茶店”。
它運行在已經建好的、正在運營的“商場”(即已經啓動的Linux系統)之內。
它依賴於商場提供的基礎設施:電力(系統調用)、水源(內存管理)、顧客流(進程調度)、保安(權限管理)等

驅動程序的啓動是系統級啓動。幾乎無依賴環境。它直接操作硬件寄存器,需要用匯編/C進行最底層的硬件初始化(時鐘、DDR、存儲器等)。燒錄.bin並設置從TF卡啓動,是給Imx6ull安裝一個完整的、可運行的操作系統。這張TF卡就是系統的“身體”。
應用程序的啓動完全依賴現有操作系統。它運行在操作系統內核之上,通過系統調用請求內核服務(如文件操作、網絡通信、內存申請)。複製程序並./運行,是在這個已經運行的操作系統之上安裝並執行一個特定的應用程序。這個程序是系統的“一個功能”。

最為直觀的就是正點原子的led驅動程序,操作的是寄存器。而應用程序操作的文件。

存放:應用程序存儲在根文件系統中,根文件系統可以在TF卡、eMMC、NAND Flash等存儲設備上。
運行:當你執行程序時,操作系統會將其從存儲設備加載到DDR內存中,然後CPU從內存中讀取指令執行。
當你在U-Boot中通過網絡將應用程序複製過來時,這個文件被暫時存放到了Imx6ull的DDR內存中。它並沒有被保存到任何永久性存儲設備(如eMMC、TF卡)上。