實驗步驟:
(1)準備工作
(2)修改頂層makefile
(3)修改falsh 分割槽
(4)配置編譯核心
下面以linux2.6.30.4核心移植到gec2440為例:
cd linux-2.6.30.4
解壓後會在當前目錄下生成乙個linux-2.6.30.4 的核心原始碼目錄
安裝交叉工具鏈,然後修改環境變數,新增新工具鏈的路徑資訊,步驟如下:
#vi /etc/bashrc
在bashrc 指令碼的最後一行新增工具鏈的路勁資訊:
#export path=/usr/local/arm/4.1.2/bin:$path
使bashrc 指令碼生效
#source /etc/bashrc
二、修改核心原始碼頂層 makefile
修改核心目錄樹根下的的makefile,指明體系結構是arm,交叉編譯工具是arm-linux- 。
#vi makefile
找到arch 和cross_compile,修改
arch ?= arm
cross_compile ?= /usr/local/arm/4.1.2/bin/arm-linux-
儲存退出。
三、修改機器碼
在u-boot-2009.11 的/board/samsun/gec2440/gec2440.c 設定了mach_type 的型別為
mach_type_smdk2410,檢視u-boot 裡的include/asm-arm/mach-types.h 檔案,有下
面定義:
#define mach_type_smdk2410 193
//針對2440 的mach_type 碼的值定義為193
而linux 核心原始碼的arch/arm/tools/mach-types 檔案有如下定義:
smdk2410 mach_smdk2410 smdk2410 193
即u-boot 和linux 核心的同樣型別的機器碼都為193。
那麼我們就修改kernel 的mach_type **引用部分,確定kernel 的mach_type。
如下,修改arch/arm/mach-s3c2440/mach-smdk2440.c :
//修改檔案最後面
將machine_start(s3c2440, "smdk2440") 修改為:machine_start(smdk2410, "smdk2440")
修改arch/arm/kernel/head.s
//在entry(stext)下新增如下**(紅色部分)
entry(stext)
mov r0, #0
mov r1, #0xc1 // mach_type_smdk2410 值193 換成十六進製制就是0xc1
ldr r2, =0x30000100 //linux kernel parameter
第二種改法:
查linux 核心原始碼的arch/arm/tools/mach-types 檔案有如下定義:
smdk2440 mach_smdk2440 smdk2440 1008
做如下修改
# vi arch/arm/mach-s3c2440/mach-smdk2440.c
將machine_start(s3c2440, "smdk2440")修改為:machine_start(smdk2440, "smdk2440")
修改arch/arm/kernel/head.s
//在entry(stext)下新增如下**(紅色部分)
entry(stext)
mov r0, #0
mov r1, #0x3f0 // mach_type_smdk2440 值1008 換成十六進製制就是0x3f0
ldr r2, =0x30000100 //linux kernel parameter
這種改法中會出現如下問題:
定義在arch/arm/mach-s3c2410/mach-smdk2410.c 中的裝置驅動沒能鏈結進來。
四、設定 flash分割槽
五、配置編譯核心
#make s3c2410_defconfig
#make menuconfig
在s3c2410_defconfig 基礎上,增刪的核心配置項如下:
這裡約定「#」後面的是注釋部分。
boot options --> default kernel command string:
noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttysac0,115200 (接下行)
rootfstype=jffs2
#說明:mtdblock2 代表第3 個flash 分割槽,它是預設的rootfs 分割槽
# console=ttysac0,115200 使kernel 啟動期間的資訊全部輸出到串列埠0 上.
# 2.6 核心對於串列埠的命名改為ttysac0,但這不影響使用者空間的串列埠程式設計。
# 使用者空間的串列埠程式設計針對的仍是/dev/ttys0 等
#接下來做的是針對檔案系統的設定,實驗時目標板上要上的檔案系統是cramfs
與jffs2,故做如下配置
file systems -->
<> second extended fs support
#去除對ext2 的支援
miscellaneous filesystems -->
[*] jffs2 xattr support (experimental)
#支援jffs2 和cramfs 檔案系統
network file systems --> #支援nfs 檔案系統
[ ] nfs client support for the nfsv3 acl protocol extension
[*]nfs client support for nfs version 4 (experimental)
<*> nfs server support
kernel features --->
[*] use the arm eabi to compile the kernel
# 一定要選上, 否則會出現核心恐慌(核心指標跑飛)
儲存退出,產生.config 核心配置檔案,該檔案會在make 的時候被呼叫。
編譯核心:make
編譯完成後會在arch/arm/boot/目錄下生產zimage 核心映象。zimage 映象是可引導的,
壓縮的核心映象,就是我們要移植到開發板上的核心映象檔案。
uimage 映象製作:
[root@localhost tools]# ./mkimage -n 'linux-2.6.30.4' -a arm -o linux -t kernel -c none -a 0x30008000 -e 0x30008040 -d /root/build_kernel/linux-2.6.30.4/arch/arm/boot/zimage /root/build_kernel/linux-2.6.30.4/arch/arm/boot/uimage
上述步驟僅新增了外設flash 與串列埠等一些基本的驅動,實現乙個能在開發板上執行的核心映象。根據專案要求,需要繼續移植的還有:
cd、觸控dm9000 網絡卡、l 屏、usb、音訊等驅動。
s5pv210的linux-2.6.35核心移植:
s5pv210的u-boot移植:
linux核心移植
1.基本開發環境 u boot版本 u boot 2012.04.01 假設u boot已經移植好 linux平台 虛擬機器下ubuntu 14.04 交叉編譯工具 gcc 4.4.3 arm開發板 mini2440 cpu s3c2440 sdram 64m,nor flash 2m,nand f...
linux3 4 2核心移植詳解(二) 移植核心
解壓進入核心頂層目錄 tar xjf linux 3.4.2.tar.bz2 修改頂層makeflie arch arm cross compile arm linux 執行make s3c2410 defconfig會出現 configuration written to config 此時將預設...
linux 核心移植(基本框架)
一 獲得linux原始碼 二 解壓系統原始碼 解壓命令 gzip v rootfile 壓縮乙個檔案rootfile gunzip rootfile.gz 解壓縮乙個檔案 tar命令 既可以壓縮檔案也可以解壓縮檔案,決定於tar命令後面所跟引數 a將檔案新增到現有的tar包 c表示建立新的tar包 ...