嵌入式Linux內核製做 —— OK6410

系統組成

10747454

嵌入式linux系統由linux內核根文件系統兩部分構成,二者缺一不可。linux

內核製做

製做嵌入式平臺使用的linux內核,方法和製做pc平臺的linux內核基本一致,下面使用對比的方式介紹如何製做用於OK6410開發板的內核。vim

1. 清除原有配置與中間文件bash

x86: make distclean工具

arm: make distclean測試

13286324

2. 配置內核ui

x86: make menuconfig 後面默認加了ARCH=i386.net

arm: make menuconfig ARCH=arm3d

解壓linux-2.6.36.tar.gz :orm

tar zxvf linux-2.6.36.tar.gzip

cd linux-2.6.36

make s3c6400_defconfig ARCH=arm

(在linux-2.6.36/arch/arm/configs/下面有不少開發板的默認配置文件,利用這個命令就能夠在一些開發板的出廠配置文件基礎上進行配置)

make menuconfig ARCH=arm

30285222

System Type -->

30481284

5267342

5299197

5331178

5351583

ARM system type --->

30449881

3. 編譯內核

x86: make bzImage

arm: make uImage ARCH=arm CROSS_COMPILE=arm-linux-

33594144

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

arch/arm/mach-s3c64xx/built-in.o: In function `smdk6410_machine_init':

/forlinux/work/kernel/linux-2.6.36/arch/arm/mach-s3c64xx/mach-smdk6410.c:916: undefined reference to `s3c_ts_set_platdata'

arch/arm/mach-s3c64xx/built-in.o:(.init.data+0x288): undefined reference to `s3c_device_ts'

arch/arm/mach-s3c64xx/built-in.o:(.init.data+0x298): undefined reference to `s3c_device_tvenc'

arch/arm/mach-s3c64xx/built-in.o:(.init.data+0x29c): undefined reference to `s3c_device_tvscaler'

arch/arm/mach-s3c64xx/built-in.o:(.init.data+0x2a0): undefined reference to `s3c_device_vpp'

arch/arm/mach-s3c64xx/built-in.o:(.init.data+0x2a4): undefined reference to `s3c_device_mfc'

arch/arm/mach-s3c64xx/built-in.o:(.init.data+0x2a8): undefined reference to `s3c_device_rotator'

arch/arm/mach-s3c64xx/built-in.o:(.init.data+0x2ac): undefined reference to `s3c_device_jpeg'

arch/arm/mach-s3c64xx/built-in.o:(.init.data+0x2b0): undefined reference to `s3c_device_g2d'

arch/arm/mach-s3c64xx/built-in.o:(.init.data+0x2b4): undefined reference to `s3c_device_g3d'

make: *** [.tmp_vmlinux1] Error 1

[root@localhost linux-2.6.36]# make menuconfig ARCH=arm

scripts/kconfig/mconf arch/arm/Kconfig

*** End of Linux kernel configuration.

*** Execute 'make' to build the kernel or try 'make help'.

[root@localhost linux-2.6.36]#

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

[root@localhost linux-2.6.36]# vim /forlinux/work/kernel/linux-2.6.36/arch/arm/mach-s3c64xx/mach-smdk6410.c

打開這個文件,將裏面的這些都註釋掉

// s3c_ts_set_platdata(&s3c_ts_platform);

// &s3c_device_ts,

//// &s3c_device_tvenc,

//// &s3c_device_tvscaler,

//// &s3c_device_vpp,

//// &s3c_device_mfc,

//// &s3c_device_rotator,

//// &s3c_device_jpeg,

//// &s3c_device_g2d,

//// &s3c_device_g3d,

而後編譯:

3768110

爲何會出現以下的錯誤呢:

mkimage" command not found - U-Boot images will not be built
  Image arch/arm/boot/uImage is ready

由於使用make uImage編譯生成的內核能由uboot引導,編譯時會用到mkimage工具,出現這種錯誤是由於編譯器沒法找到mkimage工具,該工具在uboot/tools目錄下,如下兩種方法能夠解決問題:
方法一:在/etc/bashrc的末行加入如下語句:
export PATH:=$PATH:[uboot所在目錄]/tools
方法二:將uboot/tools目錄下的mkimage文件拷備到交叉編譯環境的BIN目錄:
cd [uboot所在目錄]/tools
cp mkimage /usr/local/arm/3.4.1/bin

在紅帽下測試:

7566048

若是在Ubuntu下編譯內核uImage出現

"mkimage" command not found - U-Boot images will not be built問題

解決方法:

若是使用的是Ubuntu 9.10及以上版本,能夠使用下面的命令安裝mkimage:

#apt-get install uboot-mkimage  固然也能夠按照上面拷貝工具的方法來解決。

6377976

安裝完成後在編譯內核make umage ARCH=arm CROSS_COMPILE=arm-linux-,就能夠生成uImage文件

6417927

相關文章
相關標籤/搜索