嵌入式系統構成:linux
主要由bootloader、kernel、以及根文件系統三部分組成。網絡
內核製做步驟:ui
製做嵌入式平臺使用的linux內核製做方法與pc平臺上的linux內核基本一致spa
1.清除原有配置與中間文件設計
x86:make distclean日誌
arm:make distcleancode
2.配置內核blog
x86:make menuconfig內存
arm: make menuconfig ARCH=arm開發
3編譯內核4
x86:make bzImage
arm:make uImage ARCH=arm CROSS_COMPILE=arm-linux-
注意make zImage與make uImage的區別
make uImage會先產生zImage,而後再產生uImage(再zImage的基礎上加上48字節的頭,包括壓縮方式等)
用tftp下載時,須要把zImage拷貝到/tftp文件夾下
根文件系統製做
文件系統包含兩個層次的含義:
一、按照固定格式組織的目錄與文件(看的見)
二、在特定的存儲介質上管理這些目錄和文件須要的數據(看不見)
製做文件系統步驟:
一、建立目錄和文件
二、位建立好的目錄和文件創建管理數據
mkdir rootfs cd rootfs mkdir bin dev etc lib proc sbin sys usr mnt tmp var mkdir usr/bin usr/lib usr/sbin lib/modules
2.建立設備文件
cd dev/ mknod -m 666 console c 5 1 //mknod:建立設備文件 mknod -m 666 null c 1 3
三、安裝/etc
tar etc.tar.gz -C /XXX/rootfs
四、編譯內核模塊
進入linux內核目錄下
make modules ARCH=arm CROSS_COMPILE=arm-linux- //編譯的結果,內核模塊.ko文件散落在各個角落中
五、安裝內核模塊
make modules_install ARCH=arm INSTALL_MOD_PATH=../rootfs //把.ko文件copy到lib/modules中
安裝/編譯busybox
Busybox: 嵌入式開發中的瑞士軍刀
1.配置busybox
#make menuconfig //進入busybox目錄下
a、進入Busybox Settings ->build Options->
選中 「Build busybox as a static binary」, 靜態連接
Cross Compiler prefix (arm-linux-)
Installation Options->
選中 「Don‘t use /usr」, 選中該項能夠避免busybox 被安裝到宿主系統的/usr目錄下,破壞宿主系統
Busybox Installation Prefix (/xxx/rootfs)
該選項代表編譯後的busybox的安裝位置
編譯安裝busybox
make:編譯
make install //安裝
文件系統類型
linux引入虛擬文件系統VFS(Virtual File System)。
在嵌入式linux應用中,主要的存儲設備爲RAM和FLASH。經常使用的基於存儲設備的文件系統類型包括:jffs2,yaffs,cramfs,ramdisk,ramfs等。
jffs2:日誌閃存文件系統版本2,用於NOR flash,可讀寫、支持數據壓縮的日誌文件系統。
yaffs/ubitFS:用於nand flash設計的一種日誌型文件系統,不支持數據壓縮。
Cramfs:只讀的壓縮文件系統。(用的愈來愈少)
Ramdisk:將部分固定大小的內存當作塊設備來使用。
Initramfs:將內存當作塊設備用(如今用的多)
NFS:網絡文件系統。 (開發階段使用)
把zImagecopy到/tftp下
tftp 31000000 zImage
nand erase 200000 300000(offset size)
nand write 31000000 200000 300000(內存addr offset size)
利用Initramfs特色:每次添加一個功能都須要從新編譯內核,從新下載。