新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 把Linux放進軟盤里

        把Linux放進軟盤里

        作者: 時間:2016-09-12 來源:網絡 收藏

        本文引用地址:http://www.104case.com/article/201609/304090.htm

        筆者的同事最近在測試AMD 64bit CPU時,遇到這樣一個問題:當插入含有AMD官方軟件Maxpower64的軟盤后,系統提示不能引導。關于這個軟件AMD公司提供的信息很少,只知道它必須在linux環境下執行。所以筆者打開軟盤,發現里面只有兩個文件:syslinux.cfg,Maxpower64,這樣問題就明確了,靠這兩個文件是無法引導進入linux系統的,更不用說執行Maxpower64。下面我就介紹一下如何修復這個軟件,使得它可以正常使用。

        我們首先要得到一張可以引導進入linux環境的軟盤,這種軟盤必須由兩部分組成,即內核和根文件系統。我們首先制作一個內核。

        內核的編譯要把內核部分放到一張1.44MB的軟盤上去,通常要對內核進行壓縮,壓縮內核的最好方法是進行重新編譯內核,將一些不必要的支持去掉,如對網絡和其它周邊設備的支持,重要的一點是記住內核必須支持RAMDISK及ext2,否則系統不能正常引導。編譯之前請確認您是以root的身份在進行操作,否則會返回Permission Denied的提示。

        首先要到合適的編譯路徑,一般路徑都在/usr/src/,RH9的路徑是在/usr/src/-2.4,只有在這個路徑你的命令才會生效。否則會顯示

        make: *** No rule to make target 'config' , stop的錯誤提示.

        如果你以前編譯過內核,那應當先執行#make mrproper 這個命令,它可以刪除以前的建構的痕跡。如果你沒有編譯過,可以不執行它。

        接下來執行#make menuconfig 開始配置內核,把你認為不需要的東西都不要編譯到內核,比如業余電臺,csi,I20,IrDA,isdn,bluetooth.最后保存為.config后退出。

        再接下來就依次執行以下命令:

        #make dep (設置依賴關系)

        #make clean (準備要建構的源碼樹)

        #make bzImage (建構內核 )

        #make modules ( 配置模塊)

        #make modules_install (使用配置的模塊)

        #make install (把新的內核和相關文件復制到正確的目錄)

        執行到這里,在/boot下會看到名字為vmlinuz-2.4.22custom的文件。這就是我們編譯得到的內核。如果它的size大于1.44M,那就得重新編譯,再去掉一些不需要的東西,直到內核小于1.44M,為了便于記憶,我們不妨將它重新命名為newkernel,接下來我們緊接著制作根文件系統。

        根文件系統的制作

        制作根文件系統前,我們先要解決一個問題:因為一個根文件系統要實現基本的功能,必須包括一些常用工具:如:sh,ls,cd,cat…… 但是常用工具會占用很多空間,要是用原來系統中的這些命令,就是全部用靜態編譯,不是用動態連接庫,大概也要有2MB~3MB,放不進軟盤。因此我們我們的解決的方案是使用BusyBox工具。BusyBox 它包含了七十多種 Linux 上標準的工具程序,只需要的磁盤空間僅僅幾百 k 。在嵌入式 系統上常用到它 (例如 Linux Router Project 和 Debian boot floppy就使用到它)

        建立 BusyBox

        首先我們從官方網站上下載BusyBox的最新版本:busybox-1.00-rc3.tar.gz并且解開

        #tar zxvf busybox-1.00-rc3.tar.gz

        為了壓縮空間,我們采用靜態編譯,修改 Makefile 中的 DOSTATIC 參數為true

        DOSTATIC=true

        然后修改 BusyBox 中的 init.c,設定系統要執行的第一個程序為: /etc/rc.d/rc.sysinit

        #define INIT_SRCIPT /etc/rc.d/rc.sysinit

        開始編譯BusyBox

        #make

        #make install

        到這一步我們就得到了可執行命令busybox

        解決了這個問題后,我們可以開始制作根文件系統

        制作根文件系統

        首先為根文件系統建一個目錄叫做 floppy-Linux,然后進入 floppy-Linux 目錄內

        # mkdir floppy-Linux

        # cd floppy-Linux

        然后為 root filesystem 建立一些標準的目錄

        # mkdir dev etc etc/rc.d bin proc mnt tmp var

        # chmod 755 dev etc etc/rc.d bin mnt tmp var

        # chmod 555 proc

        # ln -s sbin bin

        然后進入 /dev 目錄下建立根文件系統必須的一些設備文件。

        建立一般終端機設備

        # mknod tty c 5 0

        # mkdir console c 5 1

        # chmod 666 tty console

        建立 VGA Display 虛擬終端機設備

        # mknod tty0 c 4 0

        # chmod 666 tty0

        建立 RAM disk 設備

        # mknod ram0 b 1 0

        # chmod 600 ram0

        建立 floppy 設備

        # mknod fd0 b 2

        # chmod 600 fd0

        建立 null 設備

        # mknod null c 1 3

        # chmod 666 null

        到這里我們就有了一個初步的小型根文件系統,但是還需要配置一些有關的 shell script來完善它。

        編輯有關的 shell script

        首先進入到 /floppy-Linux/etc/ 這個目錄下編輯 inittab,rc.d/rc.sysinit,fstab這三個文件 ,內容分別如下:

        inittab

        ::sysinit:/etc/rc.d/rc.sysinit

        ::askfirst:/bin/sh

        rc.sysinit

        #!/bin/sh

        mount –a

        fstab

        proc /proc proc defaults 0 0

        然后修改inittab,rc.sysinit,fstab這三個文件的權限

        # chmod 644 inittab

        # chmod 755 rc.sysinit

        # chmod 644 fstab

        配置完shell script后,我們注意到這些shell script會使用一些 /bin目錄下的命令,但是我們的/bin目錄下是空的。現在我們就使用BusyBox來制作這些常用命令。

        使用BusyBox制作常用命令

        將busybox 復制到軟盤的/bin目錄下,并且改名為init

        # cp busybox /floppy-Linux/bin/init

        然后創建常用命令的link,具體的工作原理請參閱busybox的官方說明。

        # ln -s init ls

        # ln -s init cp

        # ln -s init mount

        # ln -s init umount

        # ln -s init more

        # ln -s init ps

        # ln -s init sh

        現在我們就有了所需的常用命令。

        到這里我們的根文件系統就制作完成了,但是和內核一樣,要把根文件系統部分放到一張1.44MB的軟盤上去,也要進行壓縮,下面我們就著手壓縮它。


        上一頁 1 2 下一頁

        關鍵詞: Linux 放進軟盤

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 威远县| 伊吾县| 本溪市| 东方市| 滨海县| 页游| 博爱县| 甘孜| 鸡东县| 邵阳市| 延长县| 桐梓县| 建湖县| 宁国市| 泰和县| 富蕴县| 翁牛特旗| 五河县| 浠水县| 垦利县| 明溪县| 莱芜市| 张家界市| 山东省| 贡觉县| 新蔡县| 曲阜市| 瓦房店市| 高邑县| 云南省| 锡林郭勒盟| 乳源| 霍邱县| 比如县| 化德县| 安阳市| 贵州省| 东乌| 汪清县| 华安县| 梁山县|