[Mini2440] 编译 linux-2.6.32.2 内核

一 准备好开发环境

  需要创建一个 Ubuntu 虚拟机,并且安装好 VMwareTools 方便和 Windows 之间传文件。

  创建好一个 mini2440 的工作目录,后续所有 mini2440 相关的文件均存放在此目录下。

[email protected]:~$ mkdir -p workspace/mini2440

二 安装交叉编译器

  在 mini2440 工作目录下创建 package 目录,存放软件包。

[email protected]:~$ mkdir workspace/mini2440/package

  拷贝 mini2440光盘\Linux\arm-linux-gcc-4.4.3.tar.gz 到虚拟机 /home/user/workspace/mini2440/package 目录下。

  解压到 /opt 目录下并配置好环境变量.

[email protected]:~$ cd workspace/mini2440/package/
[email protected]:~/workspace/mini2440/package$ sudo tar zxf arm-linux-gcc-4.4.3.tar.gz -C /
[email protected]:~/workspace/mini2440/package$ cd
[email protected]:~$ echo "export PATH=\$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin" >> .bashrc
[email protected]:~$ . .bashrc

  验证交叉编译器是否安装成功。

[email protected]:~$ arm-linux-gcc -v
/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc: 15: exec: /opt/FriendlyARM/toolschain/4.4.3/bin/.arm-none-linux-gnueabi-gcc: not found

  没有正确的显示版本号,百度查了一下,原因是虚拟机的 Ubuntu 是 64 位的,而此交叉编译器是 32 位的版本,要想正常使用,需要安装 32 位兼容库。

[email protected]:~$ sudo apt-get install lib32ncurses5
[email protected]:~$ sudo apt-get install lib32z1

  安装好兼容库之后,验证成功。

[email protected]:~$ arm-linux-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /opt/FriendlyARM/mini2440/build-toolschain/working/src/gcc-4.4.3/configure --build=i386-build_redhat-linux-gnu --host=i386-build_redhat-linux-gnu --target=arm-none-linux-gnueabi --prefix=/opt/FriendlyARM/toolschain/4.4.3 --with-sysroot=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --enable-languages=c,c++ --disable-multilib --with-arch=armv4t --with-cpu=arm920t --with-tune=arm920t --with-float=soft --with-pkgversion=ctng-1.6.1 --disable-sjlj-exceptions --enable-__cxa_atexit --with-gmp=/opt/FriendlyARM/toolschain/4.4.3 --with-mpfr=/opt/FriendlyARM/toolschain/4.4.3 --with-ppl=/opt/FriendlyARM/toolschain/4.4.3 --with-cloog=/opt/FriendlyARM/toolschain/4.4.3 --with-mpc=/opt/FriendlyARM/toolschain/4.4.3 --with-local-prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-c99 --enable-long-long --enable-target-optspace
Thread model: posix
gcc version 4.4.3 (ctng-1.6.1) 

三 配置 linux 内核

  同样将 mini2440光盘\Linux\linux-2.6.32.2-mini2440-20150709.tgz 文件拷贝到虚拟机 /home/user/workspace/mini2440/package 目录下。

  解压开来,可以看到有很多的配置文件,当然还是挑自己板子搭配屏的配置文件。

[email protected]:~/workspace/mini2440/package$ tar zxf linux-2.6.32.2-mini2440-20150709.tgz -C ../
[email protected]:~/workspace/mini2440/package$ cd ../linux-2.6.32.2/
[email protected]:~/workspace/mini2440/linux-2.6.32.2$ ls
arch                  config_mini2440_s70d         drivers      net
block                 config_mini2440_t35          firmware     README
build.sh              config_mini2440_td35         fs           REPORTING-BUGS
config_mini2440_a70   config_mini2440_vga1024x768  include      samples
config_mini2440_a70i  config_mini2440_vga640x480   init         scripts
config_mini2440_h43   config_mini2440_vga800x600   ipc          security
config_mini2440_l80   config_mini2440_w35          Kbuild       sound
config_mini2440_n35   config_mini2440_x35          kernel       tools
config_mini2440_n43   COPYING                      lib          usr
config_mini2440_p35   CREDITS                      MAINTAINERS  virt
config_mini2440_p43   crypto                       Makefile
config_mini2440_s70   Documentation                mm

  开始配置,拷贝配置文件,执行 make menuconfig 生成对应 C 语言配置宏文件和 Makefile 编译宏控文件。

[email protected]:~/workspace/mini2440/linux-2.6.32.2$ make distclean[email protected]:~/workspace/mini2440/linux-2.6.32.2$ cp config_mini2440_x35 .config
[email protected]:~/workspace/mini2440/linux-2.6.32.2$ make menuconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/basic/docproc
  HOSTCC  scripts/basic/hash
  HOSTCC  scripts/kconfig/conf.o
scripts/kconfig/conf.c: In function ‘conf_sym’:
scripts/kconfig/conf.c:159:6: warning: variable ‘type’ set but not used [-Wunused-but-set-variable]
  int type;
      ^
scripts/kconfig/conf.c: In function ‘conf_choice’:
scripts/kconfig/conf.c:231:6: warning: variable ‘type’ set but not used [-Wunused-but-set-variable]
  int type;
      ^
scripts/kconfig/conf.c:307:4: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]
    fgets(line, 128, stdin);
    ^
scripts/kconfig/conf.c: In function ‘conf_askvalue’:
scripts/kconfig/conf.c:105:3: warning: ignoring return value of ‘fgets’, declared with attribute warn_unused_result [-Wunused-result]
   fgets(line, 128, stdin);
   ^
  HOSTCC  scripts/kconfig/kxgettext.o
 *** Unable to find the ncurses libraries or the
 *** required header files.
 *** ‘make menuconfig‘ requires the ncurses libraries.
 ***
 *** Install ncurses (ncurses-devel) and try again.
 ***
/home/user/workspace/mini2440/linux-2.6.32.2/scripts/kconfig/Makefile:186: recipe for target ‘scripts/kconfig/dochecklxdialog‘ failed
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
Makefile:454: recipe for target ‘menuconfig‘ failed
make: *** [menuconfig] Error 2

  报错了,百度查了一下,原来是缺少 ncurses 库导致,安装好库之后,成功配置。

[email protected]:~/workspace/mini2440/linux-2.6.32.2$ sudo apt-get install libncurses

  进入图形化配置界面后,直接按 esc 退出即可,配置项已经拷贝到最终的配置文件 .config 文件中了,执行 make menuconfig 的作用,只是去自动生成 Makefile 和 c 语言宏控文件。

四 编译内核

  配置 ok 了,要开始编译内核了。

[email protected]:~/workspace/mini2440/linux-2.6.32.2$ make
  CHK     include/linux/version.h
  UPD     include/linux/version.h
  Generating include/asm-arm/mach-types.h
  CHK     include/linux/utsrelease.h
  UPD     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-arm
  CC      kernel/bounds.s
/opt/FriendlyARM/toolschain/4.4.3/libexec/gcc/arm-none-linux-gnueabi/4.4.3/cc1: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
/home/user/workspace/mini2440/linux-2.6.32.2/./Kbuild:35: recipe for target ‘kernel/bounds.s‘ failed
make[1]: *** [kernel/bounds.s] Error 1
Makefile:982: recipe for target ‘prepare0‘ failed
make: *** [prepare0] Error 2

  可是又报错了,提示说是找不到 libstdc++.so.6 这个库。安装一下试试:

[email protected]:~/workspace/mini2440/linux-2.6.32.2$ sudo apt-get install lib32stdc++6

  库安装好了之后,果然可以开始编译了。

[email protected]:~/workspace/mini2440/linux-2.6.32.2$ make
... ... ... ...
  CC      kernel/exit.o
  CC      kernel/itimer.o
  TIMEC   kernel/timeconst.h
Can‘t use ‘defined(@array)‘ (Maybe you should just omit the defined()?) at kernel/timeconst.pl line 373.
/home/user/workspace/mini2440/linux-2.6.32.2/kernel/Makefile:129: recipe for target ‘kernel/timeconst.h‘ failed
make[1]: *** [kernel/timeconst.h] Error 255
Makefile:878: recipe for target ‘kernel‘ failed
make: *** [kernel] Error 2

  可是又报错了,看提示说 ‘defined(@array)‘语法有问题,将 kernel/timeconst.pl 文件中 373 行 "if (!defined(@val)) {" 修改为 "if ([email protected]) {" 后编译成功。

diff --git a/kernel/timeconst.pl b/kernel/timeconst.pl
index eb51d76..0461239 100644
--- a/kernel/timeconst.pl
+++ b/kernel/timeconst.pl
@@ -370,7 +370,7 @@ if ($hz eq ‘--can‘) {
        }

        @val = @{$canned_values{$hz}};
-       if (!defined(@val)) {
+       if (!@val) {
                @val = compute_values($hz);
        }
        output($hz, @val);

  编译成功提示如下,同时会在 arch/arm/boot/ 目录下生成 zImage 内核镜像文件。

[email protected]:~/workspace/mini2440/linux-2.6.32.2$ make
  CHK     include/linux/version.h
make[1]: ‘include/asm-arm/mach-types.h‘ is up to date.
  CHK     include/linux/utsrelease.h
  SYMLINK include/asm -> include/asm-arm
  CALL    scripts/checksyscalls.sh
  CHK     include/linux/compile.h
  Kernel: arch/arm/boot/Image is ready
  Kernel: arch/arm/boot/zImage is ready
  Building modules, stage 2.
  MODPOST 16 modules
[email protected]:~/workspace/mini2440/linux-2.6.32.2$ ls -l arch/arm/boot/zImage
-rwxrwxr-x 1 user user 2330052 11月 25 03:10 arch/arm/boot/zImage
时间: 2024-11-05 11:26:22

[Mini2440] 编译 linux-2.6.32.2 内核的相关文章

实例:编译Linux内核3.18.25概要

前提: 将CentOS 7上3.10.0-229.el7.x86_64重新编译一个3.18.25内核 自编译安装,按照自己的硬件平台架构编译,能最适合硬件主机的性能 且按照需要编译模块,可以选择自己需要的包编译 [[email protected] tmp]# uname  -a 一.编译前准备工作 1.宿主机系统 本次编译宿主机:VMware Workstation Pro12 上的CentOS 7.0操作系统 2.开发环境(开发工具,开发库),头文件 [[email protected] y

《linux 内核完全剖析》编译linux 0.12 内核 Ubuntu 64bits 环境

我×...终于好了,大概3 4个小时吧...各种毛刺问题.终究还是闯过来了.... [email protected]:~/Downloads/linux-0.00-050613/linux-0.00$ make ld -s -x -M head.o  -o system > System.map dd bs=32 if=boot of=Image skip=1 16+0 records in 16+0 records out 512 bytes (512 B) copied, 0.000605

Vs2012在Linux开发中的应用(8): 编译Linux内核

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在有了UBOOT的编译基础之后,编译Linux内核就简单多了,所不同的只有两个地方,一个是错误信息的转换,另一个是内核需要进行参数配置. 1.1    错误信息转换 UBOOT的错误信息中,文件名是不带路径的,而内核的错误信息中,文件名是带相对路径的,因此我们对转换脚本略做修改: #user code begin classCUBootMake: error=False defBuild(sel

编译 Linux 3.5 内核烧写 Android 4.2.2 到 Tiny4412 开发板

. . . . . 昨天已经编译了 Android 4.2.2 的源码,详见<Ubuntu 14.04 编译 Android 4.2.2 for Tiny4412>一文. 今天我们继续剩下的工作,让我们的 android 系统可以跑在 Tiny4412 开发板上. Android 和 Linux 是两码事,Android 系统是基于 Linux 内核的.我们编译的 Android 源码是 Android 系统本身的源码,而内核是指通过原生 Linux 源码一直过来的内核源码,所以它们需要我们分

【Linux学习】Ubuntu下内核编译(一)

(1)当要执行内核配置时,输入make menuconfig时出现错误 遇到这个问题,主要是以为没有ncurses库,而make menconfig 需要这个库,因此需要安装ncurses或者ncurses-devel即可.输入命令:sudo  apt-get  install ncurses或者sudo apt-get  install ncurses-devel. (2)错误 drivers/input/touchscreen/eeti_ts.c: In function 'eeti_ts_

如何解决编译linux内核(解决声卡问题),遭遇fatal error: linux/limits.h: 没有那个文件或目录

最近帮一位上海的朋友搞一块小板,在ubuntu15.04 vivid上已经加载了对应了.ko驱动包 但关键是系统根本就枚举不到该声卡ALC5640,试了OpenSUSE也是一样的结果,看来是内核漏加载了什么模块. 所以准备重新编译Linux内核3.19.3,结果运行: make?menuconfig 得到错误提示: ? ? ? ? local_lim.h:38:26: fatal error: linux/limits.h ? 应该是在linux目录下找不到limits.h文件.有诸多兄弟碰到过

用Vs2013+VELT进行Hi3516开发:编译Linux内核

快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 1.1    什么是VELT VELT的全称是Visual EmbedLinuxTools,它是一个与visual gdb类似的visual studio插件,用以辅助完成Linux开发.利用这个插件,将可以在visual studio的IDE中进行Linux应用程序的开发(包括编译和调试),也可以进行uboot和linux内核的编译,并根据编译时的错误信息正确定位到源码.目前的版本是0.1.1

学习重新编译Linux内核

一.实验目的学习重新编译Linux内核,理解.掌握Linux内核和发行版本的区别. 二.实验内容在Linux操作系统环境下重新编译内核.实验主要内容:A. 查找并且下载一份内核源代码,本实验使用最新的Linux内核2.6.36.B. 配置内核.C. 编译内核和模块.D. 配置启动文件.本次实验环境是Linux2.6.35内核的环境下,下载并重新编译内核源代码(2.6.36):然后,配置GNU的启动引导工具grub,成功运行编译成功的内核. 三.主要仪器设备(必填)Linux环境:utuntu10

Ubuntu下载编译Linux内核。

1.安装git工具 2.到官网下载linux内核https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git,这个地址不是很好用 在用下面这个 git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git http://vger.kernel.org/vger-lists.html#linux-kernel这个是讨论Linux驱动的邮件组 3.