Linux核心移植

2021-09-06 10:53:39 字數 3764 閱讀 3600

實驗步驟:

(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包 ...