linux -- LTIB學習筆記


一 安裝篇
二 運行篇
三 修改工具包
四 編譯新的內核


---------相關資料------------------------------------------------
以下是在學習過程中在網上搜索到的資料

LTIB使用總結          http://blog.chinaunix.net/u2/80953/showart_1275002.html
添加新平台到LTIB      http://hi.baidu.com/vivo01/blog/item/832b410637f7a7c17b89477e.html
LTIB使用常見問題匯總 http://hi.baidu.com/ferrysnow/blog/item/a4b254d3865ee5d4a9ec9a8f.html
兔子等着瞧的LTIB初識 http://blog.sina.com.cn/s/blog_61c477830100hpsx.html
------------------------------------------------------------------

前言
    LTIB(Linux Target Image Builder)工程是一個使用在不同的目標平台下,用於開發和部署BSP

(Board Support Packages)的簡單工具。使用該工具,用戶能夠為其目標平台開發符合GNU/Linux標准的

映像。
    LTIB支持PPC,ARM,Coldfire等多種目標架構。包含超過200個用戶使用的工具包以及通用跨平台的根

文件系統。LTIB支持bootloader和內核映像的構建。編譯時可對交叉編譯工具進行選擇。支持RAMDISK和

JFFS2 Flash映像的創建。2.3節提及的開發流程中的2到5步以及后期的應用程序擴展都可以在該工具下進

行。


一 安裝篇

1. 將下載好的iso文件掛載到/mnt/cdrom下:
2. #su –root
3. # mount <bspname.iso> /mnt/cdrom -o loop
4. 由於安裝ltib需要是普通用戶身份,但部分命令要超級用戶權限才行,所以需要執行visudo增加    

    用戶<username>的權限,如下操作:
5. #/usr/sbin/visudo
6. 輸入`i`后在最后一排輸入
7. <username> ALL=NOPASSWD: /bin/rpm, /opt/freescale/ltib/usr/bin/rpm
8. 進入命令行模式,輸入:wq,保存退出。
9. #exit   //退出root身份,回到普通用戶<username>身份
10. 將LTIB安裝到指定目錄下。指定目錄缺省為當前工作目錄,也可以在安裝過程中根據提示符指定    

    安裝目錄。這里使用缺省目錄安裝方法:
11. #cd <target_dir>
12. #/mnt/cdrom/install //開始安裝
13. 安裝完成后在安裝目錄下有會有相應文件夾產生,同時交叉編譯工具也以生成在/opt目錄中。
    以我的為例:
    /opt/freescale/usr/local/gcc-4.0.2-glibc-2.3.6-nptl-2/powerpc-e300c3-linux/bin

 

二 運行篇

一旦LTIB安裝完成,就可以使用默認配置運行。
#cd <target_dir>/ltib
#./ltib
第一次在用戶機器上運行LTIB,需要較長時間。運行結束后,在安裝目錄下會生成以下幾個鏡像文件:
rootfs-文件夾,將要被部署到開發板上的根文件系統。
rootfs.ext2.gz.uboot-能在開發板上使用的文件系統,可以被uboot識別。
rootfs/boot/uImage-uboot使用的內核映像。

--------------------------編譯配置選項說明----------------------------------

上面的執行過程是使用ltib的默認配置運行的,我們還可以通過./ltib -c 配置編譯選項

下面對LTIB配置窗口中各選項進行說明:
1) ---Choose the target C library type
該選項可對toolchain使用的C庫進行配置。LTIB可支持glibc和uClibc兩種C庫。
2) --- Choose your toolchain
該選項允許用戶從一系列有效的toolchain中進行選擇。該選擇將改變CFLAGS。對每一個平台還可以包含

一個用戶可定制的toolchain。
3) --- Bootloader
該選項允許對bootloader的配置進行選擇
4) --- Choose your Kernel
該配置目錄下的選項意義分別為:
Kernel-選項允許用戶從一系列有效的內核進行選擇。
Always rebuild the kernel-每次配置完成總是重新編譯內核。
Configure the kernel-LTIB編譯內核前將進入Linux內核配置窗口。
Include kernel headers-ltib將內核頭文件編譯進rootfs/usr/src/linux/include下。
Leave the sources after building kernel-該選項將解壓后的內核源碼包保留下來。
5) --- Package selection
選擇用戶使用的工具包,在其中還可以選中對busybox的配置。
6) --- Target System Configuration
對網絡和系統服務做基本的配置。
7) --- Target Image Generation
對生成的根文件系統進行配置。
8) --- Load an Alternate Configuration File
加載一個現有的配置文件
9) --- Save Configuration to an Alternate File
當前配置另存為一個文件


--------------------------LTIB常用命令--------------------------------------

LTIB的命令格式如下:
ltib [-m <mode>] [options....]
舉例:
./ltib -m prep -p helloworld
//對helloworld文件包解壓 輸出目錄為/../安裝目錄/ltib-mpc8313erdb-20070824/rpm/BUILD

下面給出LTIB的常用命令:
--mode|m
    prep        //解開源碼包並打補丁
    scbuild     //解開源碼包、打補丁然后編譯
    scinstall   //解開源碼包、打補丁,編譯后安裝
    scdeploy    //運行一個scinstall命令並安裝到rootfs下
    patchmerge //生成並且合並一個補丁 (需要與-p <pkg>一起使用)
    clean       //清除並且反安裝目標源碼包
    distclean   //完全清除,移除相關的所有東西
    listpkgs    //列出源碼包(按字母排序)
    release     //制作一個二進制發布iso鏡像
    config      //使用--configure命令,僅做配置
    shell       //進入ltib命令行模式
--pkg|p :    //僅操作指定源碼包
--configure|c : //運行交互式配置
--preconfig :    //配置文件來源
--profile : //profile文件。這個被用來選擇用戶空間源碼包集合(例如

config/profiles/max.config)
--rcfile|r :    //使用這個資源文件
--batch|b :    //批處理模式,假定對所有的問題回答yes
--force|f :    //強迫重新編譯鏈接即使已經更新到最新
--reinstall|e : //重新安裝rpm包
--nodeps|n :    //關閉安裝和反安裝依賴關系檢查
--conflicts|k : //不強迫安裝有文件沖突的rpm包
--keepsrpms|s : //保留srpms 在編譯鏈接之后 (缺省是刪除的)
--verbose|v :    //更多的輸出
--dry-run|d :    //只運行不打印 (僅輸出echo消息)
--continue|C : //在源碼包編譯鏈接過程中出錯也繼續進行
--version|V :    //打印應用程序版本並退出
--noredir|N :    //不重定向到任何輸出
--deploy|D :    //運行部署腳本即使已經更新
--dlonly :    //僅下載源碼包
--dltest :    //測試BSP的源碼包是否有效
--leavesrc|l :    //留下不解壓的源碼包 ( 僅在pkg模式下使用)
--hostcf :    //重新配置編譯鏈接安裝主機支持的源碼包集
--help|h :    //使用幫助

===========================================================================

三 修改工具包

除了LTIB提供的工具包和根文件系統外,用戶還可以修改已有的工具包,加入自己的工具包,還可以在根

文件系統中加入自己的配置。下面對用戶擴展的方式進行介紹。

------------------------------修改已有的工具包-----------------------------

1. 解壓源碼,並應用所有的補丁。
2. # ./ltib -m prep -p <package>
3. 編輯或者修改rpm/BUILD/package/下的源文件。
4. 編譯工具包。
5. # ./ltib -m scbuild -p <package>
6. 一旦工具包編譯成功,測試安裝狀態。
7. # ./ltib -m scinstall -p <package>
8. 在提交更改之前測試工具包
9. #./ltib -m scdeploy -p <package>
10. 重復步驟2-5,知道達到用戶要求為止。
11. 生成一個補丁,更新spec文件(dist/lsf/下)
12. # ./ltib -m patchmerge -p <package>
13. 手工清除patch文件
14. 可以使用rpm包進行安裝了
15. #./ltib -p <package>

------------------------------加入文件到根文件系統--------------------------

用戶有時候需要在根文件系統中加入一些自己的文件,只需要在平台目錄下建立merge文件夾,將需要加

入的文件放入merge文件下就可以了,merge文件夾下的文件在開發板上相當於位於根文件系統下。
面具體步驟如下:

1. # cd <my_ltib_dir>
2. # mkdir -p config/platform/tqm823l/merge/home/fred
3. # cp <my_files>/myfile1 config/platform/tqm823l/merge/home/fred
4. # mkdir -p merge/etc
5. # cp <my_files>/hosts merge/etc
6. # ./ltib

第4,5步是加入一些配置到開發板 如果不需要可以跳過。
這個過程簡單說就是 建merge文件夾 把要加的文件放到merge里 執行./ltib

============================================================================

四 編譯新的內核

飛思卡爾每塊開發板都會有一個相應的ltib 而每個ltib又會有一個默認的linux內核版本
所以一般選擇默認編譯就內核編譯就可以了
可是有時候可能我們的程序需要在另外一個內核版本上運行才會更穩定 這個時候就需要使用當前的ltib

平台去編譯新版本的內核

首先將我們copy兩個文件到指定目錄
1是將修改好的內核源碼打包 copy到/opt/freescale/pkgs下
2是內核配置文件
cp .config /ltib安裝目錄/config/platform/mpc8313erdb.config(.config在內核根目錄下)
其次我們要修改兩個文件的內容(紅色為修改內容) 分別是:
1 /.../ltib目錄/ltib-mpc8313erdb-20070824/config/platform/mpc8313erdb/main.lkc
2 /.../ltib目錄/ltib-mpc8313erdb-20070824/dist/lfs-5.1/kernel/kernel-2.6.25.spec.in

-----------------------------main.lkc-------------------------------------


comment "Choose your Kernel"

choice
    prompt "kernel"
    default KERNEL2
    help
        This menu will let you choose the kernel to use with your board.
        If you don't want to build a kernel, unselect this option.

    config KERNEL1
        bool "linux 2.6.20"
    config KERNEL2
        bool "linux 2.6.25"

        help
            This is the kernel for the mpc8313erdb platform
    config KERNEL_DIR_BUILD
        bool "Local Linux directory build"
        help
            Build using a local copy of the kernel sources
    config KERNEL_NONE
        bool "Dont build the Linux kernel"
endchoice

config PKG_KERNEL
    string
    default "kernel-2.6.20-mpc8313erdb" if KERNEL1
    default "kernel-2.6.25" if KERNEL2
    default "Local Linux directory build" if KERNEL_DIR_BUILD
    

source http://www.cnblogs.com/userspace/kernel_dir_build.lkc

choice
    prompt "config file"
    default KERNEL_CONFIG1
    help
        This menu lets you select a kernel config file

    config KERNEL_CONFIG1
        depends ! HWOPT_USB_OTG_EXT
        bool "default"
    config KERNEL_CONFIG2
        depends HWOPT_USB_OTG_EXT
        bool "USB OTG"
    config KERNEL_CONFIG_CUSTOM
        bool "custom"
    config KERNEL_CONFIG_NEW
        bool "default_new"
endchoice

config PKG_KERNEL_PRECONFIG
    string "kernel config file"
    default "mpc8313erdb.config" if KERNEL_CONFIG1
    default "mpc8313erdb-usbotg.config" if KERNEL_CONFIG2 || HWOPT_USB_OTG_EXT
    default "mpc8313erdb_2.6.25.config" if KERNEL_CONFIG_NEW

---------------------------kernel-2.6.25.spec.in------------------------------

我們首先從../ltib/dist/lfs-5.1/expat下copy expat.spec 到 ../ltib/dist/lfs-5.1/kernel下
cp expat.spec ../kernel/kernel-2.6.25.spec.in
cd ../kernel
vim kernel-2.6.25.spec.in

-----------------------------------------
# Template = kernel-common.tmpl

%define pfx /opt/freescale/rootfs/%{_target_cpu}
%define dversion 2.6.25
%define pkg_name linux
%define bld_dir_name linux-2.6.25 //解壓后內核文件夾的名字

Summary         : Linux kernel (core of the Linux operating system)
Name            : kernel
Version         : 2.6.25
Release         : 0
License         : GPL
Vendor          : kernel.org + freescale patches
Packager        : Olivia Yin
Group           : System Environment/Kernel
Source          : linux-2.6.25.tar.bz2
BuildRoot       : %{_tmppath}/%{name}
Prefix          : %{pfx}

%Description
%{summary}

From kernel.org
All patches from Freescale

%Prep
%setup -n %{bld_dir_name}
------------------------------------------

修改完畢!
./ltib -c //配置你需要編譯的內核版本 保存 退出 編譯


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM