编译linux内核 arm(linux内核移植的步骤)

大家好,今天来为大家分享编译linux内核 arm的一些知识点,和linux内核移植的步骤的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!

qemu搭建arm64 linux kernel环境

搭建ARM64 Linux内核环境,包含详细步骤如下:

一、环境准备:

使用Ubuntu 22.04系统,并下载最新版Linux内核源码(Linux Kernel Archives)。

安装交叉编译工具链,通过命令行使用`sudo apt-get install gcc-12-aarch64-linux-gnu`或自行下载(开发者网站:developer.arm.com/downloads)。

安装QEMU版本(最新版为`sudo apt-get install qemu-system-arm`)。

二、编译内核:

解压内核源码后,设置`config`文件,使用命令`make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- defconfig`进行编译配置。确保`CROSS_COMPILE`前缀与自定义编译工具链名称一致。

执行`make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- Image-j8`编译内核,生成kernel image`Image`和用于gdb调试的`vmlinux`文件。

可选步骤:编译内核模块(ko),使用命令`make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- modules-j8`。

三、制作根文件系统:

选择便捷的busybox作为根文件系统,下载最新版本(busybox-1.36.1.tar.bz2)。进行编译配置并安装,根文件系统位于`busybox-1.36.1.tar.bz2/install/`。

构建ext4 image,合并busybox到img中,为后续实验提供方便。

四、使用QEMU启动内核:

创建启动脚本,包含内核`Image`和根文件系统`rootfs.img`的加载,确保脚本具有执行权限。启动脚本用于QEMU环境,简化实验过程。

完成步骤后,系统搭建完成。此过程记录于操作手册中,方便后续查看与避免重复错误。

如何配置编译在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目录下的同名文件

如何建立针对arm-linux的交叉编译环境

采用交叉编译的主要原因在于,多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只好将编译工程转移到高性能的主机中进行。

linux下的交叉编译环境重要包括以下几个部分:

1.对目标系统的编译器gcc

2.对目标系统的二进制工具binutils

3.目标系统的标准c库glibc

4.目标系统的linux内核头文件

交叉编译环境的建立步骤

一、下载源代码下载包括binutils、gcc、glibc及linux内核的源代码(需要注意的是,glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致),并设定shell变量PREFIX指定可执行程序的安装路径。

二、编译binutils首先运行configure文件,并使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,然后执行make install。

三、配置linux内核头文件

首先执行make mrproper进行清理工作,然后执行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)进行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架构,因为缺省架构为主机的cpu架构),这一步需要根据目标机的实际情况进行详细的配置,笔者进行的实验中目标机为HP的ipaq-hp3630 PDA,因而设置system type为SA11X0,SA11X0 Implementations中选择Compaq iPAQ H3600/H3700。

配置完成之后,需要将内核头文件拷贝到安装目录: cp-dR include/asm-arm$PREFIX/arm-linux/include/asm cp-dR include/linux$PREFIX/arm-linux/include/linux

四、第一次编译gcc

首先运行configure文件,使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,并使用--disable-threads、--disable-shared、--enable-languages=c参数,然后执行make install。这一步将生成一个最简的gcc。由于编译整个gcc是需要目标机的glibc库的,它现在还不存在,因此需要首先生成一个最简的gcc,它只需要具备编译目标机glibc库的能力即可。

五、交叉编译glibc

这一步骤生成的代码是针对目标机cpu的,因此它属于一个交叉编译过程。该过程要用到linux内核头文件,默认路径为$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一个名为sys-linux的软连接,使其内核头文件所在的include目录;或者,也可以在接下来要执行的configure命令中使用--with-headers参数指定linux内核头文件的实际路径。

configure的运行参数设置如下(因为是交叉编译,所以要将编译器变量CC设为arm-linux-gcc): CC=arm-linux-gcc./configure--prefix=$PREFIX/arm-linux--host=arm-linux--enable-add-ons最后,按以上配置执行configure和make install,glibc的交叉编译过程就算完成了,这里需要指出的是,glibc的安装路径设置为$PREFIXARCH=arm/arm-linux,如果此处设置不当,第二次编译gcc时可能找不到glibc的头文件和库。

六、第二次编译gcc

运行configure,参数设置为--prefix=$PREFIX--target=arm-linux--enable-languages=c,c++。

运行make install。

到此为止整个交叉编译环境就完全生成了。

几点注意事项

第一点、在第一次编译gcc的时候可能会出现找不到stdio.h的错误,解决办法是修改gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS变量的设定中增加-Dinhibit_libc和-D__gthr_posix_h。

阅读剩余
THE END