arm linux内核编译,arm架构可以安装x86软件吗
大家好,今天来为大家分享arm linux内核编译的一些知识点,和arm架构可以安装x86软件吗的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
如何配置编译在mini2440开发板上运行的linux内核
参考:
系统ubuntu12.04(非虚拟机下)
mini2440
CPU型号: S3C2440AL-40
Nanflash型号:K9F1G08
Norflash型号:SST39VF1601
LCD:统宝 240 x 320
$:普通账户
#:root账户
*当shell下输入路径时可使用tab键自动补全
(一)建立交叉编译环境
1.将mini2440光盘中的linux文件夹拷贝到/home/lianghuiyong并改名为Linux_share
(其中两个文档为我后面添加进去的)
2.Ctrl+Alt+T打开shell
3.$ su- root(切换root权限)
4.# cd/home/lianghuiyong/Linux_share
5.解压安装arm-linux-gcc编辑器
# tar xvzf arm-linux-gcc-4.4.3.tar.gz–C///注意:C后面有个空格
执行该命令,将把 arm-linux-gcc安装到/usr/loca/arm/4.4.3目录。这句来自mini2440用户手册,我发现其实是安装到/opt/FriendlyARM/toolchain/4.4.3目录
6.# vim/root/.bashrc
7.在最后一行添加:export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin//opt/FriendlyARM/toolschain/4.4.3/bin为arm-linux-gcc环境变量
:wq保存退出。
# source~/.bashrc
8.# sudo gedit/etc/environment
games后面添加标记部分
9.# arm-linux-gcc-v//gcc后面有空格
测试hello.c(这是在安装了第二部分的linux示例程序才有examples/hello目录)
# cd/opt/FriendlyARM/mini2440/examples/hello
# arm-linux-gcc-o hello hello.c
#./hello
(二)安装源代码及其他工具
创建工作目录(以下都为root环境下):
# mkdir-p/opt/FriendlyARM/mini2440
1>>解压安装linux内核源代码
# cd/opt/FriendlyARM/mini2440
# tar xvzf/home/lianghuiyong/Linux_share/linux-2.6.32.2-mini2440-20100106.tar.gz
2>>解压安装嵌入式图形系统qtopia源代码
# cd/opt/FriendlyARM/mini2440
# tar xvzf/home/lianghuiyong/Linux_share/x86-qtopia.tgz
# tar xvzf/home/lianghuiyong/Linux_share/arm-qtopia.tgz
3>>解压安装嵌入式图形系统 QtE-4.6.1源代码
# cd/opt/FriendlyARM/mini2440
# tar xvzf/home/lianghuiyong/Linux_share/arm-qte-4.6.3-20100802.tar.gz
4>>解压安装busybox源代码
# cd/opt/FriendlyARM/mini2440
# tar xvzf/home/lianghuiyong/Linux_share/busybox-1.13.3-mini2440.tgz
5>>解压安装 Linux示例程序
# cd/opt/FriendlyARM/mini2440
# tar xvzf/home/lianghuiyong/Linux_share/examples-20100108.tgz
6>>解压安装 vboot源代码
# cd/opt/FriendlyARM/mini2440
# tar xvzf/home/lianghuiyong/Linux_share/vboot-src-20100106.tar.gz
7>>解压安装 bootloader源代码
# cd/opt/FriendlyARM/mini2440
# tar xvzf/home/lianghuiyong/Linux_share/bootloader.tgz
8>>解压创建目标文件系统
# cd/opt/FriendlyARM/mini2440
#tar xvzf/home/lianghuiyong/Linux_share/rootfs_qtopia_qt4-20100816.tar.gz
9>>解压安装目标文件系统映象制作工具 mkyaffs2image
# cd/opt/FriendlyARM/mini2440
# tar xvzf/home/lianghuiyong/Linux_share/mkyaffs2image.tgz–C/
10>>解压安装LogoMaker
# cd/opt/FriendlyARM/mini2440
# tar xvzf/home/lianghuiyong/Linux_share/logomaker.tgz–C/
(三)定制linux内核及制作文件系统
config_mini2440_x35–适用于 Sony 3.5” LCD的内核配置文件
config_mini2440_t35–适用于统宝 3.5” LCD的内核配置文件
config_mini2440_l80–适用于 Sharp 8” LCD(或兼容)的内核配置文件
config_mini2440_n35–适用于 NEC3.5” LCD的内核配置文件
config_mini2440_h43–适用于 4.3” LCD的内核配置文件
config_mini2440_a70–适用于群创 7” LCD的内核配置文件
config_mini2440_vga1024x768–适用于 VGA显示输出(分辨率 1024x768)模块的内核
配置文件
1.配置缺省文件config_t35(统宝240x320)
# cd/opt/FriendlyARM/mini2440/linux-2.6.32.2
# cp config_mini2440_t35.config
# make menuconfig
出现界面
不做更改,exit退出。这样做是为了生成相应配置(统宝240x320)的头文件。
2.编译内核
在/opt/FriendlyARM/mini2440/linux-2.6.32.2目录下编译内核
#make zImage
编译结束后,会在 arch/arm/boot目录下生成 linux内核映象文件:zImage(zImage可下载到开发板测试)
3.定制linux内核(根据用户手册来走一遍)
# cd/opt/FriendlyARM/mini2440/linux-2.6.32.2
# make menuconfig
出现配置选项:
3.1配置cpu
主菜单-->System--> Type S3C2400 Machines--> FriendlyARM Mini2440 development board
3.2配置lcd驱动
主菜单-->Device Drivers-->Graphics support-->Support for frame buffer devices-->Backlight-->LCD select-->3.5 inch 240x320 Toppoly LCD
3.3配置触摸屏
主菜单-->Device Drivers-->Input device support-->Touchscreens-->Samsung s3c24410 touchscreen input driver
3.4配置usb鼠标和键盘
主菜单-->Device Drivers-->hid devices-->USB Human interface Device
3.5配置优盘
主菜单-->Device Drivers-->SCSI device support--> SCSI disk
3.6配置万能驱动USB摄像头
主菜单-->Device Drivers-->Multimedia devices-->Video capture adapters-->V4L USB devices-->GSPCA based webcams-->ALi USB m 5602 Camera Driver
3.7配置CMOS摄像头驱动
主菜单-->Device Drivers-->Multimedia devices-->Video capture adapters-->OV9650 on the s3c2440 driver
3.8配置网卡驱动
主菜单-->Netwoking support-->Networking options-->选择Unix和TCP/IP
主菜单-->Device Drivers-->Network device support-->Ethernet(10 or 100Mbit)-->
选择<*> Generic Media Independent Interface device support
<*> DM9000 support
3.9配置USB无线网卡驱动
主菜单-->Netwoking support-->wireless-->IEEE 802.11
主菜单-->Device Drivers-->Netwoking device support-->wireless LAN-->Wireless LAN(IEEE 802.11)-->Ralink driver support-->
3.10配置音频驱动
主菜单-->Device Drivers-->Sound card supprt-->OSS Mixer API-->ALSA for Soc audio support-->SoC Audio for the samsung S3Cxxxx Chips
3.11配置SD/MMC卡驱动
主菜单-->Device Drivers-->MMC/SD/SDIO card-->samsung S3C SD/MMC card
3.12配置看门狗驱动支持
主菜单-->Device Drivers-->Watchdog Timer-->s3c2440 Watchdog
3.13配置LED驱动
主菜单-->Device Drivers-->Character devices-->LED support for Mini2440
3.14配置按键驱动
主菜单-->Device Drivers-->Character devices-->Buttons driver
3.15配置PWM控制蜂鸣器驱动
主菜单-->Device Drivers-->Character devices-->buzzer driver for
3.16配置AD转换驱动
主菜单-->Device Drivers-->Character devices-->ADC driver for
3.17配置串口驱动
主菜单-->Device Drivers-->Character devices-->Serial drivers-->samsung S3C2440/S3C2442
3.18如何配置RTC实时时钟驱动
主菜单-->Device Drivers-->Real Time Clock-->samsung S3C series SoC RTC
3.19配置I2C-EEPROM驱动支持
主菜单-->Device Drivers-->I2C support-->I2C Hardware Bus support-->S3C2410 I2C Driver
3.20配置yaff2s文件系统的支持
主菜单-->Device Drivers-->MTD-->NAND Device Support-->NAND FLASH Support
主菜单-->File systems-->Miscellaneous filesystems-->YAFFS2 file system support
3.21配置EXT2/VFAT/ NFS等文件系统
主菜单-->File systems-->Network File Systems-->root file system on NFS
为了支持FAT32文件系统.
主菜单-->File systems-->DOS/FAT/NT Filesystems-->VFAT(windows-95) fs support
关于mini2440 linux内核裁剪到此为止,退出后有一个是否保存提示,选择保存!
3.22制作Linux logo
本来想使用Logomaker,结果生成的图片都是无数据的,这可能和系统内一些参数有关
使用命令方式制作logo:
在图片(open_show.png)目录下
# pngtopnm open_show.png> temp.ppm
# ppmquant 224 temp.ppm>temp2.ppm
# pnmnoraw temp2.ppm> logo.ppm
将目录下生成的logo.ppm改成linux_logo_clut224.ppm,替代linux2.6.32.2/drivers/video/logo目录下的同名文件
嵌入式Linux内核编译求解!!!
让我来告诉你答案!本人也是试验中的菜鸟一枚,有些经验还有理解大家分享。
你说的这些步骤,是开发板移植或者产品移植过程中的一环,移植,就是把PC上编写好的,已经可以完成功能的程序编程开发板芯片,你用的是arm的芯片,那就是用arm的指令系统可以辨认执行的文件。
zimage是内核映像的image文件的压缩版,主要减少映像大小。如果是用pc机的编译系统编译出来,就是能在PC机上运行的linux内核,OS,放在开发板上,也是一样的功用。
至于开发板内核会不会变,应该说你每一次烧入一个内核的时候,效果都相当于对PC机进行了一次系统重装,系统肯定是会变的,变成了你烧录进去的编译好的linux2.6.28.这一点可以肯定。但是是不是变得和以前不一样就不一定了,也许内核的文件从头到尾都是一个,更有可能的是你手上就没有出厂时烧入的内核程序,人家没给你,那么你除非不烧,掠过内核的部分永远不变,只改变文件系统,那么内核肯定是会变的。另外对内核改变不需要太犹豫,没有那块开发板上的文件从头到尾没变过的,内核文件也一样,会有这种情况的只有出厂产品。开发板就是大胆折腾,才能把开发板玩好。
系统内核用zimage这样的形式,是深层的原因是因为节省固化flash空间,还是有利于cpu内部结构运行,没有研究过。
zimage不是直接下到板子里就能运行的,配置的问题先不说,启动不是直接从zimage启动的,因为这个是压缩文件,至少要解压之后才能使用。
但是实际上用的也不是zimage映像文件。而是uimage文件。zimage和uimage差不多。
uimage文件是用于被uboot引导的文件,是一个64K的文件头和一个zimage文件组成的。
从编译角度来说,现在手上的内核的创建映像的makefile文件中的目标似乎是一口气把这几个映像文件都生成了。单独使用makeuimage也能生成uimage映像文件。但既然uimage是从zimage转化而来,那么应该是必须先要编译出了zimage才能有uimage文件生成。
有了uimage文件后,就要有uboot文件,有的板子因为搬运和运行的操作流程,还会有一级bootstrap,这是因为内部ram大小决定的。uboot是为了必要的硬件初始化和引导内核和文件系统而存在的,uboot将内核需要的软件和硬件环境都配置好了之后,将内核复制解压到内存中,并跳转到内存里内核的入口,将操作权交给内核。内核正是启动,配置无误后挂载文件系统。
如果这些程序都完成,那么开发板就可以运行起来了。
很不幸,我现在还没有搞定。
但是如果你不需要移植,只是要运用一个配置好的开发板,那么你想了解的可能是这个,下载到flash中文件的名称和顺序和地址。
名称没有确定的,但是大概是这样的形式:bootloader.bin(其中包括uboot和其它形式boot,可能最初还会有bootstrap)+zimage+root.(jffs*/yaffs*/etx*)等。
烧入的地址也是要严格对应程序,或者手册说明建议中的,如果出现相互覆盖或者该有的文件不在应该的位置,那么也是不会启动成功的。
linux和嵌入式linux都不是很简单的,任重道远,共同进步吧。
linux编译内核步骤
一、准备工作
a)首先,你要有一台PC(这不废话么^_^),装好了Linux。
b)安装好GCC(这个指的是host gcc,用于编译生成运行于pc机程序的)、make、ncurses等工具。
c)下载一份纯净的Linux内核源码包,并解压好。
注意,如果你是为当前PC机编译内核,最好使用相应的Linux发行版的源码包。
不过这应该也不是必须的,因为我在我的Fedora 13上(其自带的内核版本是2.6.33.3),就下载了一个标准的内核linux-2.6.32.65.tar.xz,并且顺利的编译安装成功了,上电重启都OK的。不过,我使用的.config配置文件,是Fedora 13自带内核的配置文件,即/lib/modules/`uname-r`/build/.config
d)如果你是移植Linux到嵌入式系统,则还要再下载安装交叉编译工具链。
例如,你的目标单板CPU可能是arm或mips等cpu,则安装相应的交叉编译工具链。安装后,需要将工具链路径添加到PATH环境变量中。例如,你安装的是arm工具链,那么你在shell中执行类似如下的命令,假如有类似的输出,就说明安装好了。
[root@localhost linux-2.6.33.i686]# arm-linux-gcc--version
arm-linux-gcc(Buildroot 2010.11) 4.3.5
Copyright(C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
注:arm的工具链,可以从这里下载:回复“ARM”即可查看。
二、设置编译目标
在配置或编译内核之前,首先要确定目标CPU架构,以及编译时采用什么工具链。这是最最基础的信息,首先要确定的。
如果你是为当前使用的PC机编译内核,则无须设置。
否则的话,就要明确设置。
这里以arm为例,来说明。
有两种设置方法():
a)修改Makefile
打开内核源码根目录下的Makefile,修改如下两个Makefile变量并保存。
ARCH:= arm
CROSS_COMPILE:= arm-linux-
注意,这里cross_compile的设置,是假定所用的交叉工具链的gcc程序名称为arm-linux-gcc。如果实际使用的gcc名称是some-thing-else-gcc,则这里照葫芦画瓢填some-thing-else-即可。总之,要省去名称中最后的gcc那3个字母。
b)每次执行make命令时,都通过命令行参数传入这些信息。
这其实是通过make工具的命令行参数指定变量的值。
例如
配置内核时时,使用
make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
编译内核时使用
make ARCH=arm CROSS_COMPILE=arm-linux-
注意,实际上,对于编译PC机内核的情况,虽然用户没有明确设置,但并不是这两项没有配置。因为如果用户没有设置这两项,内核源码顶层Makefile(位于源码根目录下)会通过如下方式生成这两个变量的值。
SUBARCH:=$(shell uname-m| sed-e s/i.86/i386/-e s/sun4u/sparc64/\
-e s/arm.*/arm/-e s/sa110/arm/\
-e s/s390x/s390/-e s/parisc64/parisc/\
-e s/ppc.*/powerpc/-e s/mips.*/mips/\
-e s/sh[234].*/sh/)
ARCH?=$(SUBARCH)
CROSS_COMPILE?=
经过上面的代码,ARCH变成了PC编译机的arch,即SUBARCH。因此,如果PC机上uname-m输出的是ix86,则ARCH的值就成了i386。
而CROSS_COMPILE的值,如果没配置,则为空字符串。这样一来所使用的工具链程序的名称,就不再有类似arm-linux-这样的前缀,就相当于使用了PC机上的gcc。
最后再多说两句,ARCH的值还需要再进一步做泛化。因为内核源码的arch目录下,不存在i386这个目录,也没有sparc64这样的目录。
因此顶层makefile中又构造了一个SRCARCH变量,通过如下代码,生成他的值。这样一来,SRCARCH变量,才最终匹配到内核源码arch目录中的某一个架构名。
SRCARCH:=$(ARCH)
ifeq($(ARCH),i386)
SRCARCH:= x86
endif
ifeq($(ARCH),x86_64)
SRCARCH:= x86
endif
ifeq($(ARCH),sparc64)
SRCARCH:= sparc
endif
ifeq($(ARCH),sh64)
SRCARCH:= sh
endif
三、配置内核
内核的功能那么多,我们需要哪些部分,每个部分编译成什么形式(编进内核还是编成模块),每个部分的工作参数如何,这些都是可以配置的。因此,在开始编译之前,我们需要构建出一份配置清单,放到内核源码根目录下,命名为.config文件,然后根据此.config文件,编译出我们需要的内核。
但是,内核的配置项太多了,一个一个配,太麻烦了。而且,不同的CPU架构,所能配置的配置项集合,是不一样的。例如,某种CPU的某个功能特性要不要支持的配置项,就是与CPU架构有关的配置项。所以,内核提供了一种简单的配置方法。
以arm为例,具体做法如下。
a)根据我们的目标CPU架构,从内核源码arch/arm/configs目录下,找一个与目标系统最接近的配置文件(例如s3c2410_defconfig),拷贝到内核源码根目录下,命名为.config。
注意,如果你是为当前PC机编译内核,最好拷贝如下文件到内核源码根目录下,做为初始配置文件。这个文件,是PC机当前运行的内核编译时使用的配置文件。
/lib/modules/`uname-r`/build/.config
这里顺便多说两句,PC机内核的配置文件,选择的功能真是多。不编不知道,一编才知道。Linux发行方这样做的目的,可能是想让所发行的Linux能够满足用户的各种需求吧。
b)执行make menuconfig对此配置做一些需要的修改,退出时选择保存,就将新的配置更新到.config文件中了。
注