嵌入式工業(yè)一體機(jī)系統(tǒng)怎么組成呢?嵌入式系統(tǒng)如何使用?
1 嵌入式系統(tǒng)組成 BootLoader、內(nèi)核、根目錄文件系統(tǒng)
2 BootLoader uboot是嵌入式啟動(dòng)程序BootLoader的業(yè)界老大,所以一般都用uboot。
操作之前先make distclean以前的配置項(xiàng)。
2.1 配置uboot
Uboot編譯后要告訴映像運(yùn)行在什么系統(tǒng)體系上。配置要在Makefile文件上進(jìn)行,vim Makefile打開Makefile,如果是210開發(fā)板直接搜索 “/210”,然后通過next查詢其他有用信息。查詢跟開發(fā)板匹配的配置項(xiàng),比如“tq210”;
2.2 編譯uboot
make ARCH=arm CROSS_COMPILE=arm-linux-
編譯完成后會(huì)生成一個(gè)uboot.bin 文件,是要燒寫到開發(fā)板運(yùn)行的;是一個(gè)二進(jìn)制映像。
2.3 下載并運(yùn)行
3 內(nèi)核
3.1 內(nèi)核配置(X86為例)
為啥配置內(nèi)核:通過軟件需求和硬件需求,選出需要的、去掉不用的。硬件方面:比如是arm體系,x86就沒用就不選;軟件方面:比如是ipv4,選ipv6就沒用。
配置內(nèi)核的方法:
make config:基于文本模式的交互式配置
make menuconfig:基于文本模式的菜單型配置(用這種方法方便、快捷)
選項(xiàng)菜單:
三種選擇方式:<>、<*>、<M>
內(nèi)核映像文件***終運(yùn)行在內(nèi)存中,系統(tǒng)啟動(dòng),BootLoader會(huì)將zIMage解壓到內(nèi)存里,在內(nèi)存里面運(yùn)行。
配置完成后用:ls –a查看 (a就是all)可以看到隱藏的文件,其中.config就是保存的配置文件。
查看內(nèi)容:vim .config
CONFIG:固定的標(biāo)準(zhǔn)格式;LOCALVERSION:配置項(xiàng)的名字;y=yes相當(dāng)于<*>;沒有配置的加’#’,加’is not set’;
如何加載一個(gè)已有的配置文件,然后在其上面做修改?
(Linux本身的配置文件在/boot/config-4.15.0-45-generic),找到一個(gè)配置文件config-4.15.0-45-generic復(fù)制到當(dāng)前目錄下,然后make menuconfig -> load -> ‘文件路徑文件名'(例如當(dāng)前w文件下的路徑就是”./config-4.15.0-45-generic”) -> ok;
3.2 編譯內(nèi)核
3.2.1 編譯內(nèi)核生成鏡像文件
make zImage:主要用于小于512K
make bzImage:
make bzImage V=1 :查看編譯的詳細(xì)信息
編譯好的內(nèi)核位于arch/<cpu>/boot/目錄下
3.2.2 編譯內(nèi)核模塊(<M>產(chǎn)生內(nèi)核模塊)
make modules:內(nèi)核模塊散落在各個(gè)文件中,.ko文件就是內(nèi)核模塊,查看方式ls *.ko;
make modules_install:要把內(nèi)核模塊放到/lib/modules目錄下面。使用操作:make modules_install會(huì)把散落的文件移動(dòng)到/lib/modules目錄下。
3.3 制作init ramdisk(即將所有內(nèi)核模塊打包為一個(gè)文件)
命令:mkinitrd initrd-$version $version
例子:mkinitrd initrd-2.6.32 2.6.32
initrd-2.6.32 打包成文件的名字
$version 為通過make modules_install移動(dòng)到一個(gè)文件夾的內(nèi)核模塊文件的文件名,可以通過查詢/lib/modules下的目錄得到。
3.4 安裝內(nèi)核
將映像文件和打包好的modules文件復(fù)制到boot目錄下,Linux啟動(dòng)的時(shí)候BootLoader會(huì)到boot目錄下找文件。
3.4.1 復(fù)制zImage鏡像文件到boot中
cp arch/x86/boot/bzImage /boot/vmlinuz-$version 取得名字
3.4.2 復(fù)制moduls文件到boot文件中
cp initrd-$version /boot/
3.4.3 修改/etc/grub.conf /*這是啟動(dòng)的配置文件*/
保存后重新啟動(dòng)Linux系統(tǒng)。啟動(dòng)時(shí)有一個(gè)倒計(jì)時(shí)的地方,然后立即按下F12(戴爾),可以選擇系統(tǒng)要啟動(dòng)內(nèi)核。
啟動(dòng)完成后:
用 uname –r 命令:查看正在運(yùn)行的內(nèi)核版本。
內(nèi)核運(yùn)行在內(nèi)存
文件系統(tǒng)存放在硬盤或者開發(fā)板的flash
3.5 清理內(nèi)核
要清楚編譯內(nèi)核的時(shí)候產(chǎn)生了什么。配置時(shí)產(chǎn)生了.config文件;編譯的時(shí)候產(chǎn)生了.o文件,匯總成了bzImage;還產(chǎn)生一些.ko文件
make clean:清理.o文件,沒有清除掉.config文件,
ls /drivers/net 可以看到有很多.ko文件
make distclean 可以清除掉配置文件也可以清除掉.o文件
4 嵌入式Linux內(nèi)核制作
制作嵌入式平臺(tái)使用的Linux內(nèi)核,方法和制作PC平臺(tái)的Linux內(nèi)核基本一致;
4.1 復(fù)制解壓一個(gè)Linux內(nèi)核代碼
4.2 make distclean 清除以前的配置項(xiàng)
4.3 配置內(nèi)核:make menuconfig ARCH=arm
4.4 編譯內(nèi)核:make uImage ARCH=arm CROSS_COMPILE=arm-linux-
如果報(bào)錯(cuò):將tools中的mkimage文件復(fù)制到bin文件夾,然后在重新編譯;
然后將uImage.bin文件復(fù)制到根目錄下的tftpboot文件夾下。然后通過serial com下載到目標(biāo)板
編譯完成后生成的uImage文件在/arch/arm/boot/中可看到
5 根文件系統(tǒng)的制作
5.1 建立根文件系統(tǒng)目錄與文件
5.1.1 創(chuàng)建目錄
先創(chuàng)建一個(gè)目錄然后進(jìn)入
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)建設(shè)備文件(只能在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中的文件解壓后都復(fù)制到etc文件中。
5.1.4 添加內(nèi)核模塊
cd …/mini2440 /*進(jìn)入可以編譯內(nèi)核的文件夾*/ (即mini240的內(nèi)核制作的文件夾)
make modules ARCH=arm CROSS_COMPILE=arm-linux-
make modules_install ARCH=arm INSTALL_MOD_PATH=…/rootfs
粉色處為路徑:home/dongry/rootfs
5.1.5 解壓后進(jìn)入busybox文件并配置、編譯、安裝busybox:
make menuconfig:進(jìn)入配置界面
進(jìn)入Busybox Settings àbuild Options->選中“Build busybox as astatic binary”,靜態(tài)鏈接
進(jìn)入Cross Compiler prefix改為(arm-linux-)
進(jìn)入Installation Options->選中“Don‘t use /usr”,選中該項(xiàng)可以避免busybox被安裝到宿主系統(tǒng)的/usr目錄下,破壞宿主系統(tǒng)
進(jìn)入Busybox Installation Prefix改路徑(/xxx/rootfs),該選項(xiàng)表明編譯后的busybox的安裝位置
編譯busybox:make
安裝busybox:make install
5.2 掛載根文件系統(tǒng)
根據(jù)存儲(chǔ)設(shè)備的硬件特性、系統(tǒng)需求,不同的文件系統(tǒng)類型有不同的應(yīng)用場合。在嵌入式Linux應(yīng)用中,主要的存儲(chǔ)設(shè)備為RAM和FLASH,常用的基于存儲(chǔ)設(shè)備的文件系統(tǒng)類型包括:jffs2, yaffs2, ubifs, ramdisk等
5.2.1 initramfs方式
軟連接
ln –s ./bin/busybox init /*-s:軟鏈接; init:軟連接名字*/
進(jìn)入內(nèi)核文件
make menuconfig ARCH=arm
general setup-><*>Initial RAM filesystem and RAM disk (initramfs/initrd) support
然后在Initramfs source file(s)處添加rootfs的路徑
配置完成后重新編譯內(nèi)核:make uImage ARCH=arm CROSS_COMPILE=arm-linux-
因?yàn)槲募到y(tǒng)是掛載到內(nèi)核上的,所以需要重新編譯內(nèi)核
5.2.2 NFS方式
此種方式的特點(diǎn):當(dāng)文件系統(tǒng)需要重新添加一個(gè)文件的時(shí)候,initarmfs還得需要重新編譯內(nèi)核,而NFS方式是直接通過網(wǎng)絡(luò)連接的會(huì)直接反饋到系統(tǒng)上,不需要重新編譯內(nèi)核。
內(nèi)核配置:make menuconfig ARCH=arm
取消掉上邊方式的配置項(xiàng),并退出;
進(jìn)入file system->networking file systems->保證root file system on nfs被選中,退出保存
然后進(jìn)行內(nèi)核編譯:make uImage ARCH=arm CROSS_COMPILE=arm-linux-
因?yàn)槲募到y(tǒng)是掛載到內(nèi)核上的,所以需要重新編譯內(nèi)核。
聲明:本產(chǎn)品如有應(yīng)用于航空航天,軌道交通,醫(yī)療領(lǐng)域,軍用和特種設(shè)備領(lǐng)域等相關(guān)安全領(lǐng)域的參與,控制及實(shí)施等,請將詳細(xì)需求(如:產(chǎn)品用途,使用環(huán)境,產(chǎn)品安全標(biāo)準(zhǔn),產(chǎn)品穩(wěn)定性要求等重要安全需求和標(biāo)準(zhǔn))提前以書面形式告知我司客服由我司進(jìn)行特殊定制再送有資質(zhì)的第三方機(jī)構(gòu)進(jìn)行合格認(rèn)證,取得證書后再由使用方確認(rèn)無誤后簽名蓋章并簽訂《特殊行業(yè)產(chǎn)品合同》,否則我司不負(fù)責(zé)由此產(chǎn)生的經(jīng)濟(jì)損失及法律責(zé)任,特此聲明。