歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

OK6410_Linux系統系統移植 和 驅動加載

終於完成了從一個基礎內核到 ARM嵌入式內核的學習和移植工作,加上自己的uboot和根文件系統,呵呵。雖然是菜鳥的成果,但我依舊很開心,從我發表那一篇ARM_Linux 項目拉力正式開始的一周內,我還算是有了一個好的開始了,我做到了,呵呵。  我的開發環境是VMware 虛擬機 Ubuntu10.10 ,飛凌OK6410開發板,最終移植的內核為Linux-2.6.34.11。板子最終的實現性能為,啟動Uboot,加載內核,掛載NFS 主機上的根文件系統,並成功測試和加載OK6410 的LED 燈的驅動,運行LED 燈測試模塊,驅動正常工作。當然在這幾天完成的都是瘋狂的參考網友們的資料,其中也有很多CSDN的博友。寫這篇博文,不是為了詳細的敘述ARM Linux移植的技術點,就是問了將我們在移植過程中出現的對應的問題,來尋找對應的博客。

第一、先來說說Uboot。

因為是參考飛凌提供的Uboot來 自己制作uboot 的,所以做起來能夠簡單一些,  飛凌的uboot是  仿照三星 smdk6410 這個板子主體來做的。而我們現在到的通用Uboot,裡面就有這一個函數體,Makefile 裡有這一項smdk6410_config       :       uconfig

@$(MKCONFIG) $(@:_config=)   arm  s3c64xx smdk6410 samsung s3c6410

如果你需要改成自己的板載文件的話,也可以借鑒百度文庫“我的arm_linux移植筆記.pdf”這篇博文,不過如果你也是飛凌的OK6410,或者其他ARM11,系列開發板的話,我這人不建議你去修改這一項,因為,飛凌無論是 uboot 還是後面的內核(飛凌提供的內核有 2.6.28 和2.6.36.2) 都是依賴於smdk6410,後面我會寫到。 移植Uboot的 另外需要修改的文件就是include文件,在一些通用的uboot 在 include/configs/ 下面會有一個smdk6410.h 的文件。 有關於 ./cpu/samsung/smdk6410/start.S的修改,你都可以參考一下網友的資源,其實也可以直接下載一些網友已經制作好了的開發板對應的uboot,來使用,或者學習他的源碼,就可以事半功倍。所以我在詳細描述了,

第二、根文件系統的制作

根文件系統預備知識
嵌入式Linux中都需要構建根文件系統,構建根文件系統的規則在FHS(Filesystem Hierarchy Standard)文檔中,下面是根文件系統頂層目錄。
目錄 內容
bin 存放所有用戶都可以使用的、基本的命令。
sbin 存放的是基本的系統命令,它們用於啟動系統、修復系統等。
usr 裡面存放的是共享、只讀的程序和數據。
proc 這是個空目錄,常作為proc文件系統的掛載點。
dev 該目錄存放設備文件和其它特殊文件。
etc 存放系統配置文件,包括啟動文件。
lib 存放共享庫和可加載塊(即驅動程序),共享庫用於啟動系統、運行根文件系統中的可執行程序。
boot 引導加載程序使用的靜態文件
home 用戶主目錄,包括供服務賬號鎖使用的主目錄,如FTP
mnt 用於臨時掛接某個文件系統的掛接點,通常是空目錄。也可以在裡面創建空的子目錄。
opt 給主機額外安裝軟件所擺放的目錄。
root root用戶的主目錄
tmp 存放臨時文件,通常是空目錄。
var 存放可變的數據。
2.2、構建根文件按系統
2.2.1、建立根文件系統目錄
進 入到/opt/studyarm目錄,新建建立根文件系統目錄的腳本文件create_rootfs_bash,使用命令chmod +x create_rootfs_bash改變文件的可執行權限,./create_rootfs_bash運行腳本,就完成了根文件系統目錄的創建。
#!/bin/sh
echo "------Create rootfs directons start...--------"
mkdir rootfs
cd rootfs
echo "--------Create root,dev....----------"
mkdir root dev etc boot tmp var sys proc lib mnt home
mkdir etc/init.d etc/rc.d etc/sysconfig
mkdir usr/sbin usr/bin usr/lib usr/modules

echo "make node in dev/console dev/null"
mknod -m 600 dev/console c 5 1
mknod -m 600 dev/null    c 1 3
 
mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp

mkdir var/lib var/lock var/run var/tmp

chmod 1777 tmp
chmod 1777 var/tmp

echo "-------make direction done---------"
改變了tmp目錄的使用權,讓它開啟 sticky位,為tmp目錄的使用權開啟此位,可確保tmp目錄底下建立的文件,只有建立它的用戶有權刪除。盡管嵌入式系統多半是單用戶,不過有些嵌入 式應用不一定用root的權限來執行,因此需要遵照根文件系統權限位的基本規定來設計。
2.2.2、建立動態鏈接庫
動態鏈接庫直接用友善之臂的,先解壓友善之臂的根文件包,拷貝lib的內容到新建的根文件目錄lib內。
cd /mnt/hgfs/share
tar –zxvf root_qtopia.tgz –C /opt/studyarm
cp –rfd /opt/studyarm/root_qtopia/lib/* /opt/studyarm/rootfs/lib/*
2.2.3 交叉編譯Bosybox
Bosybox是一個遵循GPL v2協議的開源項目,它在編寫過程總對文件大小進行優化,並考慮了系統資源有限(比如內存等)的情況,使用Busybox可以自動生成根文件系統所需的bin、sbin、usr目錄和linuxrc文件。
1、解壓busybox
cd /mnt/hgfs/share
tar –zxvf busybox-1.13.3.tar.tgz –C /opt/studyarm
2、進入源碼,修改Makefile文件:
cd /opt/studyarm/busybox-1.13.3
修改:
CROSS_COMPILE ?=arm-linux-   //第164行
ARCH ?=arm //第189行
3、配置busybox
輸入make menuconfig進行配置
(1)、Busybox Settings--->
  General Configuration--->
[*] Show verbose applet usage messages
[*] Store applet usage messages in compressed form
[*] Support –install [-s] to install applet links at runtime
[*] Enable locale support(system needs locale for this to work)
[*] Support for –long-options
[*] Use the devpts filesystem for unix98 PTYs
[*] Support writing pidfiles
[*] Runtime SUID/SGID configuration via /etc/busybox.config
[*]  Suppress warning message if /etc/busybox.conf is not readable
Build Options--->
     [*] Build BusyBox as a static binary(no shared libs)
[*] Build with Large File Support(for accessing files>2GB)
Installation Options->
[]Don’t use /usr
Applets links (as soft-links) --->
(./_install) BusyBox installation prefix
Busybox Library Tuning --->
(6)Minimum password legth
(2)MD5:Trade Bytes for Speed
[*]Fsater /proc scanning code(+100bytes)
[*]Command line editing
(1024)Maximum length of input
[*] vi-style line editing commands
(15) History size
[*] History saving
[*] Tab completion
[*]Fancy shell prompts
(4) Copy buffer size ,in kilobytes
[*]Use ioctl names rather than hex values in error messages
[*]Support infiniband HW
(2)、Linux Module Utilities--->
  (/lib/modules)Default directory containing modules
(modules.dep)Default name of modules.dep
[*] insmod
[*] rmmod
[*] lsmod
[*] modprobe
-----options common to multiple modutils
[ ] support version 2.2/2.4 Linux kernels
[*]Support tainted module checking with new kernels
[*]Support for module .aliases file
[*] support for modules.symbols file
(3)、在busybox中配置對dev下設備類型的支持
dev的創建有三種方法:
手動創建:在制作根文件系統的時候,就在dev目錄下創建好要使用的設備文件,系統掛接根文件系統後,就可以使用dev目錄下的設備文件了。
使用devfs文件系統:這種方法已經過時,具有不確定的設備映射、沒有足夠的主/次設備號、devfs消耗大量的內存。
udev:它是個用戶程序,能根據系統中硬件設備的狀態動態的更新設備文件,包括設備文件的創建、刪除等。它的操作相對復雜,但靈活性很高
mdev 是busybox自帶的一個簡化版的udev,適合於嵌入式的應用埸合。其具有使用簡單的特點。它的作用,就是在系統啟動和熱插拔或動態加載驅動程序時, 自動產生驅動程序所需的節點文件。在以busybox為基礎構建嵌入式linux的根文件系統時,使用它是最優的選擇。下面的選項將增加對mdev的支 持。
Linux System Utilities  --->               
    [*]Support /etc/mdev.conf         
    [*]Support command execution at device addition/removal

Copyright © Linux教程網 All Rights Reserved