国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
移植Linux內(nèi)核2.6.32.2到QQ2440開發(fā)板

http://www.cnblogs.com/jeffkuang/articles/3774911.html

2014

目標(biāo)機(jī):友善之臂 QQ2440開發(fā)板

交叉編譯器:arm-linux-3.4.1

二. 移植linux-2.6.32.2內(nèi)核到QQ2440開發(fā)板

 

1.獲得內(nèi)核: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.2.tar.bz2

2.解壓內(nèi)核: tar –jxvf  linux-2.6.32.2.tar.bz2

3.修改參數(shù):

3.1 進(jìn)入內(nèi)核目錄,修改makefile

ARCH ?=arm

CROSS_COMPILE ?=arm-linux-

然后執(zhí)行如下的命令,使用arch/arm/configs/s3c2410_defconfig文件來配置內(nèi)核,它生成.config配置文件,以后就可以直接使用”make menuconfig”修改配置了。

make s3c2410_defconfig

最后是編譯生成內(nèi)核,執(zhí)行”make”命令將在頂層目錄下生成內(nèi)核映像文件vmlinux;執(zhí)行”make uImage”除生成vmlinux外,還在arch/arm/boot目錄下生成U-Boot格式的內(nèi)核映像文件uImage;執(zhí)行”make zImage”除生成vmlinux外,還在arch/arm/boot目錄下生成vivi引導(dǎo)的內(nèi)核映像文件zImage。

3.2 修改平臺(tái)輸入時(shí)鐘由于QQ2440板子 系統(tǒng)時(shí)鐘源為 12M 無源晶振

找到內(nèi)核源碼arch/arm/mach-s3c2440/mach-smdk2440.c文件,

static void __init smdk2440_map_io(void)

{

     s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));

     s3c24xx_init_clocks(12000000);//原來是16934400

     s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));

}

3.3 修改MTD分區(qū)信息

修改文件arch/arm/plat-s3c24xx/common-smdk.c。

第一,修改分區(qū)信息(64M):

static struct mtd_partition smdk_default_nand_part[] = {

[0] = {

           .name = "bootloader",

           .offset = 0x00000000,

           .size = 0x00030000,

},

[1] = {

          .name = "kernel",

          .offset = 0x00050000,

          .size = 0x00200000,

},

[2] = {

          .name = "root",

          .offset = 0x00250000,

          .size = 0x03dac000,

}

};

3.4 修改S3C2440 的機(jī)器號(hào)

由于Bootloader 傳遞給Linux 內(nèi)核的機(jī)器號(hào)為782(根據(jù)實(shí)際的情況)

修改 arch/arm/tools/mach-types 文件

s3c2440      ARCH_S3C2440 S3C2440    782

3.5 給內(nèi)核打yaffs2文件系統(tǒng)的補(bǔ)丁

從http:/www.aleph1.co.uk/cgi-bin/viewcvs.cgi/獲取源代碼文件cvs-root.tar,解壓源碼目錄并進(jìn)入目錄

cd /…/…/cvs/yaffs2

./patch-ker.sh c  /

上面命令完成下面三件事情:

(1) 修改內(nèi)核fs/Kconfig

增加一行:source "fs/yaffs2/Kconfig"

(2) 修改內(nèi)核fs/Kconfig

增加一行:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/

(3) 在內(nèi)核fs/目錄下創(chuàng)建yaffs2 目錄

將yaffs2 源碼目錄下面的Makefile.kernel 文件復(fù)制為fs/yaffs2/Makefie;

將yaffs2 源碼目錄的Kconfig 文件復(fù)制到內(nèi)核fs/yaffs2 目錄下;

將yaffs2 源碼目錄下的*.c *.h 文件復(fù)制到內(nèi)核fs/yaffs2 目錄下.

3.6 內(nèi)核配置

1> 進(jìn)入Linux-2.6.32.2內(nèi)核主目錄,通過以下命令將2410的默認(rèn)配置文件寫到當(dāng)前目錄下的.config。S3C2410的配置和S3C2440差不多,,在這基礎(chǔ)上進(jìn)行修改。

make  s3c2410_defconfig (也可以上面就做)

2> 配置內(nèi)核模塊的功能,有幾種方式可以進(jìn)行界面選擇:

 

make menuconfig(文本選單的配置方式,在有字符終端下才能使用)

make xconfig(圖形窗口模式的配置方式,圖形窗口的配置比較直觀,必須支持Xwindow下才能使用)

make oldconfig(文本配置方式,在原內(nèi)核配置的基礎(chǔ)修改時(shí)使用)

這里使用make menuconfig命令。

3> [*]Enable loadable module support--->

[*]Forced module loading

[*]Module unloading

4> System Type--->

S3C2410 Machines--->

[*]SMDK2410/A9M2410選上 其余不選

S3C2440 Machines--->

[*]SMDK2440

[*]SMDK2440 with S3C2440 CPU module,其余不選

其余的Machines下選項(xiàng)全部不選(如2400,2412,2442,2443)

5> Kernel Features--->

[ ]Use the ARM EABI to compile the kernel

注:如果所使用的的交叉編譯arm-linux-gcc-4.3.2是符合EABI標(biāo)準(zhǔn)交叉編譯器,對(duì)于浮點(diǎn)運(yùn)行會(huì)預(yù)設(shè)硬浮點(diǎn)運(yùn)算FPA(Float Point Architecture),而沒有FPA的CPU,比如SAMSUNG S3C2410/S3C2440,會(huì)使用FPE(Float Point Emulation 即軟浮點(diǎn)),這樣在速度上就會(huì)遇到極大的限制,使用EABI(Embedded Application Binary Interface)則可以對(duì)此改善處理,ARM EABI有許多革新之處,其中最突出的改進(jìn)就是Float Point Performance,它使用Vector Float Point(矢量浮點(diǎn)),因此可以極大提高涉及到浮點(diǎn)運(yùn)算的程序。

6> Boot options-?

noinitrd root=/dev/mtdblock2 init=/linuxrc  console=ttySAC0

7> Userspace binary formats--->

[*]Kernel support for ELF binaries

其它的可以全部不選。

8> 選擇支持yaffs2文件系統(tǒng)

Filesystem--->

Miscellaneous filesystems--->

<*>YAFFS2 file system support

[*] Lets Yaffs do its own ECC

Native language support

<*> Codepage 437 (United States,Canada)

<*>Simplified Chinese charset(GB2312)

<*>Traditional Chinese charset(Big5)

<*>NLS ISO 8859-1(Latin1:Western European Languages)

<*>NLS UTF-8

配置完成以后,我們就可以通過以上的命令生成我們需要的uImage或者zImage鏡像文件了,然后通過uboot或者supervivi燒寫內(nèi)核。我們通過supervivi的USB工具下載的內(nèi)核啟動(dòng)情況如下:

Copy linux kernel from 0x00050000 to 0x30008000, size = 0x00200000 ... done

zImage magic = 0x016f2818

Setup linux parameters at 0x30000100

linux command line is: "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySA

C0"

MACH_TYPE = 782

NOW, Booting Linux......

Uncompressing Linux.............................................................

....................................... done, booting the kernel.

Linux version 2.6.32.2 (root@localhost.localdomain) (gcc version 3.4.1) #1 Fri M

ay 7 16:57:01 CST 2010

CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0007177

Machine: SMDK2440

。。。。。。。。。

Failed to execute /linuxrc.  Attempting defaults...

Kernel panic - not syncing: No init found.  Try passing init= option to kernel.

從以上的啟動(dòng)信息可知還需要文件系統(tǒng)才能啟動(dòng)。

 

下一步我們將建立yaffs根文件系統(tǒng)。

前一篇文章我們已將Linux-2.6.32.2的內(nèi)核移植好了,當(dāng)然了驅(qū)動(dòng)我們還沒有添加上去,今天我們先建立一個(gè)yaffs文件系統(tǒng),待我們的內(nèi)核能夠掛載我們的文件系統(tǒng)以后,我們?cè)偃ミM(jìn)一步的完善內(nèi)核,這樣,嵌入式linux系統(tǒng)就算是構(gòu)建成功了。

1、  下載busybox

在home/kele888目錄下建立rootfs文件夾,并把busybox壓縮文件解壓到home/kele888目錄下我下載的是busybox-1.13.0的版本。

 

 

[root@localhost kele888]# ls

busybox-1.13.0 ....

[root@localhost kele888]#

2、  進(jìn)入busybox目錄開始編譯

修改Makefile文件

# vim Makefile

164行 CROSS_COMPILE ?= arm-linux-

190行 ARCH ?= arm

保存推出

配置busybox

# make menuconfig(可以根據(jù)需要適當(dāng)選擇,改一下其他默認(rèn)就行了)

BusyBox Settings --->

Build Options ---> (采用靜態(tài)編譯)

[*] Build BusyBox as a static binary (no shared libs)

Install optin-->

[*] Don't use /usr  //可以不選,選了則沒有/usr文件夾

Busybox Library Tuning --->

(2) MD5: Trade Bytes for Speed

[*] Faster /proc scanning code (+100 bytes)

[*] Support for /etc/networks

[*] Command line editing

[*] Additional editing keys

[*] vi-style line editing commands

[*] History saving

[*] Tab completion

[*] Username completion

[*] Fancy shell prompts

Linux Module Utilities --->

[ ] Support version 2.2.x to 2.4.x Linux kernels

[*] Support version 2.6.x Linux kernels

Linux System Utilities --->

[*] Support for the old /etc/mtab file

Miscellaneous Utilities --->

[*] devfs(obsolete)

[*] Use devfs names for all device(obsolete)

Shell --->

Choose your default shell(ash)-->

---ash

編譯安裝busybox

make CONFIG_PREFIX=/home/kele888/rootfs install

注:編譯“networking/interface.c”文件時(shí)可能會(huì)出現(xiàn)以下錯(cuò)誤:

CC    networking/interface.o

networking/interface.c:818: error: 'ARPHRD_INFINIBAND' undeclared here (not in a function)

make[1]: *** [networking/interface.o] Error 1

make: *** [networking] Error 2

通過查看內(nèi)核源代碼目錄中的“include/linux/ifarp.h”文件可得知“ARPHRDINFINIBAND”的值為“32”,然后修改“networking/interface.c”文件,在其中添加:

#define ARPHRD_INFINIBAND 32

完成以后將會(huì)在rootfs文件下生成如下的文件:

bin  linuxrc  sbin  usr

修改_install/bin/busybox 的屬性。為+x

chmod +x ./_install/bin/busybox

必須要修改屬性,否則在busybox 中很多命令會(huì)受限

然后在rootfs中建立其它目錄

mkdir dev etc home lib mnt proc sys tmp root var

下面我們看一下由busybox生成以及自己mkdir的文件里面的一些內(nèi)容(當(dāng)然有些是不必要的):

“dev”目錄

下面的內(nèi)容在內(nèi)核掛載完畢文件系統(tǒng)后,系統(tǒng)會(huì)使用mdev 自動(dòng)建立。

不過mdev 是調(diào)用init 進(jìn)程來啟動(dòng)的,在使用mdev 構(gòu)建“dev”目錄前,init 進(jìn)程需要用到“/dev/console”和“/dev/null”這兩個(gè)設(shè)備文件,所以,我們需要在制作文件系統(tǒng)時(shí)靜態(tài)創(chuàng)建這兩個(gè)設(shè)備文件,方法如下:

 

 

#mknod console c 5 1

#mknod null c 1 3

如果不創(chuàng)建這兩個(gè)設(shè)備文件,在文件系統(tǒng)啟動(dòng)時(shí)會(huì)出現(xiàn)錯(cuò)誤信息.大概是不能初始化控制臺(tái)。

“etc”目錄

用來存放系統(tǒng)的配置文件。

在“etc”目錄下面有如下常用的文件:

fstab:指明需要掛載的文件系統(tǒng);

group:用戶組;

inittab:init 進(jìn)程的配置文件;

passwd:密碼文件;

profile:用戶環(huán)境配置文件;

mdev.conf:因?yàn)?.6.18 版本開始linux 放棄使用devfs 而采用udev(mdev 是udev 的簡化版本),這里的

mdev.conf 文件可以是空,也可以按照一定規(guī)則來編寫,這里我采用了為空;

resolv.conf:存放DNS 信息的文件,訪問外網(wǎng)時(shí)需要DNS 的信息。

常用的目錄有:

init.d 目錄:啟動(dòng)文件目錄,該目錄下面有個(gè)“rcS”的文件,里面存放了系統(tǒng)啟動(dòng)時(shí)配置以及自啟動(dòng)加載

的進(jìn)程等;

sysconfig 目錄:在我們的文件系統(tǒng)里面,該目錄下面存放了名為“HOSTNAME”的文件,該文件內(nèi)容為:

Kele,這句話就是我們?cè)谖募到y(tǒng)里面看到那個(gè)“[root@ Kele/]” rc.d 目錄:在我們的文件系統(tǒng)里面用來存放一些自啟動(dòng)所要調(diào)用的腳步等;

-----------------------/lib文件--------------------------------

/lib的庫其實(shí)就是進(jìn)行busybox編譯的庫,即交叉編譯器的庫,我們這里使用的是3.4.1(位置/usr/local/arm/3.4.1)。

# cd  /usr/local/arm/3.4.1/arm-linux/lib

# for file in libc libcrypt libdl libm libpthread libresolv libutil

> do

> cp $file-*.so  rootfs/lib (復(fù)制到你做的文件系統(tǒng)的/lib目錄下)

> cp -d $file.so.[*0-9]  rootfs/lib

> done

# cp -d ld*.so*  rootfs/lib

-----------------系統(tǒng)配置文件的建立---------------------

--========/etc目錄============

(1) fstab文件

# device     mount-point    type   options        dump  fsck order

proc           /proc        proc   defaults        0     0

tmpfs          /tmp         tmpfs  defaults        0     0

sysfs          /sys         sysfs  defaults        0     0

tmpfs          /dev         tmpfs  defaults        0     0

(2)inittab文件

# /etc/inittab

::sysinit:/etc/init.d/rcS

s3c2410_serial0::askfirst:-/bin/sh

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

(3)創(chuàng)建/etc/init.d文件夾和rcS,在rcS中添加

#!/bin/sh

ifconfig eth0 192.168.1.17

mount -a

mkdir /dev/pts

mount -t devpts devpts /dev/pts

echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s

(4)host文件

Kele

(5)創(chuàng)建mdev.conf文件 (空文件)

(6)復(fù)制主機(jī)/etc/下面的文件passwd, group, shadow 文件到/etc

# cp /etc/group .

# cp /etc/passwd .

# cp /etc/shadow .

修改passwd中用戶使用的shell名稱。FC6上默認(rèn)的為bash,而vivi只支持ash。

root:x:0:0:root:/root:/bin/bash -->root:x:0:0:root:/root:/bin/ash

(7)修改各文件和文件夾的權(quán)限

# chmod 755 /rootfs/etc/init.d/rcS

# chmod 755 /rootfs/etc/host

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Linux 內(nèi)核移植和根文件系統(tǒng)制作
基于S3C2440的Linux內(nèi)核移植和yaffs2文件系統(tǒng)制作 -- fafen's B...
Linux內(nèi)核移植和yaffs2根文件系統(tǒng)制作V1.2(4)
ARM的嵌入式Linux移植體驗(yàn)之操作系統(tǒng)
u-boot-2011.06在基于s3c2440開發(fā)板的移植之引導(dǎo)內(nèi)核與加載根文件系統(tǒng)
linux-2.6內(nèi)核移植
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服