嵌入式工業(yè)一體機系統怎么組成呢?嵌入式系統如何使用?
1 嵌入式系統組成 BootLoader、內核、根目錄文件系統
2 BootLoader uboot是嵌入式啟動程序BootLoader的業(yè)界老大,所以一般都用uboot。
操作之前先make distclean以前的配置項。
2.1 配置uboot
Uboot編譯后要告訴映像運行在什么系統體系上。配置要在Makefile文件上進行,vim Makefile打開Makefile,如果是210開發(fā)板直接搜索 “/210”,然后通過next查詢其他有用信息。查詢跟開發(fā)板匹配的配置項,比如“tq210”;
2.2 編譯uboot
make ARCH=arm CROSS_COMPILE=arm-linux-
編譯完成后會生成一個uboot.bin 文件,是要燒寫到開發(fā)板運行的;是一個二進制映像。
2.3 下載并運行
3 內核
3.1 內核配置(X86為例)
為啥配置內核:通過軟件需求和硬件需求,選出需要的、去掉不用的。硬件方面:比如是arm體系,x86就沒用就不選;軟件方面:比如是ipv4,選ipv6就沒用。
配置內核的方法:
make config:基于文本模式的交互式配置
make menuconfig:基于文本模式的菜單型配置(用這種方法方便、快捷)
選項菜單:
三種選擇方式:<>、<*>、<M>
內核映像文件***終運行在內存中,系統啟動,BootLoader會將zIMage解壓到內存里,在內存里面運行。
配置完成后用:ls –a查看 (a就是all)可以看到隱藏的文件,其中.config就是保存的配置文件。
查看內容:vim .config
CONFIG:固定的標準格式;LOCALVERSION:配置項的名字;y=yes相當于<*>;沒有配置的加’#’,加’is not set’;
如何加載一個已有的配置文件,然后在其上面做修改?
(Linux本身的配置文件在/boot/config-4.15.0-45-generic),找到一個配置文件config-4.15.0-45-generic復制到當前目錄下,然后make menuconfig -> load -> ‘文件路徑文件名'(例如當前w文件下的路徑就是”./config-4.15.0-45-generic”) -> ok;
3.2 編譯內核
3.2.1 編譯內核生成鏡像文件
make zImage:主要用于小于512K
make bzImage:
make bzImage V=1 :查看編譯的詳細信息
編譯好的內核位于arch/<cpu>/boot/目錄下
3.2.2 編譯內核模塊(<M>產生內核模塊)
make modules:內核模塊散落在各個文件中,.ko文件就是內核模塊,查看方式ls *.ko;
make modules_install:要把內核模塊放到/lib/modules目錄下面。使用操作:make modules_install會把散落的文件移動到/lib/modules目錄下。
3.3 制作init ramdisk(即將所有內核模塊打包為一個文件)
命令:mkinitrd initrd-$version $version
例子:mkinitrd initrd-2.6.32 2.6.32
initrd-2.6.32 打包成文件的名字
$version 為通過make modules_install移動到一個文件夾的內核模塊文件的文件名,可以通過查詢/lib/modules下的目錄得到。
3.4 安裝內核
將映像文件和打包好的modules文件復制到boot目錄下,Linux啟動的時候BootLoader會到boot目錄下找文件。
3.4.1 復制zImage鏡像文件到boot中
cp arch/x86/boot/bzImage /boot/vmlinuz-$version 取得名字
3.4.2 復制moduls文件到boot文件中
cp initrd-$version /boot/
3.4.3 修改/etc/grub.conf /*這是啟動的配置文件*/
保存后重新啟動Linux系統。啟動時有一個倒計時的地方,然后立即按下F12(戴爾),可以選擇系統要啟動內核。
啟動完成后:
用 uname –r 命令:查看正在運行的內核版本。
內核運行在內存
文件系統存放在硬盤或者開發(fā)板的flash
3.5 清理內核
要清楚編譯內核的時候產生了什么。配置時產生了.config文件;編譯的時候產生了.o文件,匯總成了bzImage;還產生一些.ko文件
make clean:清理.o文件,沒有清除掉.config文件,
ls /drivers/net 可以看到有很多.ko文件
make distclean 可以清除掉配置文件也可以清除掉.o文件
4 嵌入式Linux內核制作
制作嵌入式平臺使用的Linux內核,方法和制作PC平臺的Linux內核基本一致;
4.1 復制解壓一個Linux內核代碼
4.2 make distclean 清除以前的配置項
4.3 配置內核:make menuconfig ARCH=arm
4.4 編譯內核:make uImage ARCH=arm CROSS_COMPILE=arm-linux-
如果報錯:將tools中的mkimage文件復制到bin文件夾,然后在重新編譯;
然后將uImage.bin文件復制到根目錄下的tftpboot文件夾下。然后通過serial com下載到目標板
編譯完成后生成的uImage文件在/arch/arm/boot/中可看到
5 根文件系統的制作
5.1 建立根文件系統目錄與文件
5.1.1 創(chuàng)建目錄
先創(chuàng)建一個目錄然后進入
mkdir rootfs
cd rootfs
然后批量的創(chuàng)建開發(fā)板需要的以下目錄:
mkdir bin devetc lib proc sbin sys usr mnt tmp var
mkdir usr/bin usr/lib usr/sbin lib/modules
5.1.2 創(chuàng)建設備文件(只能在root模式下創(chuàng)建)
cd rootfs/dev
mknod -m 666 console c 5 1
mknod -m 666 null c 1 3
5.1.3 加入配置文件
將etc.tar.gz中的文件解壓后都復制到etc文件中。
5.1.4 添加內核模塊
cd …/mini2440 /*進入可以編譯內核的文件夾*/ (即mini240的內核制作的文件夾)
make modules ARCH=arm CROSS_COMPILE=arm-linux-
make modules_install ARCH=arm INSTALL_MOD_PATH=…/rootfs
粉色處為路徑:home/dongry/rootfs
5.1.5 解壓后進入busybox文件并配置、編譯、安裝busybox:
make menuconfig:進入配置界面
進入Busybox Settings àbuild Options->選中“Build busybox as astatic binary”,靜態(tài)鏈接
進入Cross Compiler prefix改為(arm-linux-)
進入Installation Options->選中“Don‘t use /usr”,選中該項可以避免busybox被安裝到宿主系統的/usr目錄下,破壞宿主系統
進入Busybox Installation Prefix改路徑(/xxx/rootfs),該選項表明編譯后的busybox的安裝位置
編譯busybox:make
安裝busybox:make install
5.2 掛載根文件系統
根據存儲設備的硬件特性、系統需求,不同的文件系統類型有不同的應用場合。在嵌入式Linux應用中,主要的存儲設備為RAM和FLASH,常用的基于存儲設備的文件系統類型包括:jffs2, yaffs2, ubifs, ramdisk等
5.2.1 initramfs方式
軟連接
ln –s ./bin/busybox init /*-s:軟鏈接; init:軟連接名字*/
進入內核文件
make menuconfig ARCH=arm
general setup-><*>Initial RAM filesystem and RAM disk (initramfs/initrd) support
然后在Initramfs source file(s)處添加rootfs的路徑
配置完成后重新編譯內核:make uImage ARCH=arm CROSS_COMPILE=arm-linux-
因為文件系統是掛載到內核上的,所以需要重新編譯內核
5.2.2 NFS方式
此種方式的特點:當文件系統需要重新添加一個文件的時候,initarmfs還得需要重新編譯內核,而NFS方式是直接通過網絡連接的會直接反饋到系統上,不需要重新編譯內核。
內核配置:make menuconfig ARCH=arm
取消掉上邊方式的配置項,并退出;
進入file system->networking file systems->保證root file system on nfs被選中,退出保存
然后進行內核編譯:make uImage ARCH=arm CROSS_COMPILE=arm-linux-
因為文件系統是掛載到內核上的,所以需要重新編譯內核。
朗歌斯工控一體機
? 2025. All Rights Reserved. 粵ICP備15047506號