linux内核的配置编译与移植

合集下载

Linux内核裁剪移植——内核的主要组成部分

Linux内核裁剪移植——内核的主要组成部分
关部分。 硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关部分为内存管理硬件提供了虚拟
接口。 虚拟文件系统隐藏了不同类型硬件的具体细节,为所有的硬件设备提供了一个标准的接口,
VFS提供了十多种不同类型的文件系统。
Linux内核裁剪移植——内核的主要组成部分 5
网络接口提供了对各种网络标准的存取和各种网络硬件的支持。 进程通信部分用于支持进程间各种不同的通信机制。 进程调度处于核心位置,内核的其他子系统都要依赖它,因为每个子系统都存在进程挂起或恢
Linux内核裁剪移植 ——内核的主要组成部分
Linux内核裁剪移植——内核的主要组成部分 2
内核,即操作系统。它为底层的可编程部件提供服务,为上层应用程序提供执行环境。 内核裁剪就是对这些功能进行裁剪,选取满足特定平台和需求的功能。不同的硬件平台对内核
要求也不同,因此从一个平台到另一个平台需要对内核进行重新配置和编译。 操作系统从一个平台过渡到另一个平台称为移植。 Linux是一款平台适应性且容易裁剪的操作系统,因此Linux在嵌入式系统得到了广泛的应用。
Linux内核裁剪移植——内核的主要组成部分 3
Linux内核主要的5个部分:进程调度、内存管理、虚拟文件系统、网络接口、进程通信。在系 统移植的时候,它们是内核的基本元素。
Linux内核裁剪移植——内核的主要组成部分 4
进程调度部分负责控制进程对CPU的访问。 内存管理允许多个进程安全地共享主内存区域。内存管理从逻核的主要组成部分 7
虚拟文件系统与网络接口之间的关系: ➢ 虚拟文件系统通过依赖网络接口支持网络文件系统(NFS) ➢ 也通过依赖内存管理支持RAMDISK设备。
内存管理与虚拟文件系统之间的关系: ➢ 内存管理利用虚拟文件系统支持交换 ➢ 交换进程定期地由调度程序调度,这也是内存管理依赖于进程调度的唯一原因。 ➢ 当一个进程存取的内存映射被换出时,内存管理将会向文件系统发出请求,同时,挂起当 前正在运行的进程。

Linux内核编译过程详解

Linux内核编译过程详解

内核升级前的准备工作:Linux系统进行内核升级或定制内核时需要安装GCC编译工具、make编译器,同时变异内核需要root权限。

安装GCC编译环境参考:/rhelinux/248.html操作系统:RHEL 5.5开始安装:按照以下顺序安装所需要的包就可以完成GCC的安装了1. rpm -ivh kernel-headers-2.6.18-194.el5.i386.rpm2. rpm -ivh glibc-headers-2.5-49.i386.rpm3. rpm -ivh glibc-devel-2.5-49.i386.rpm4. rpm -ivh libgomp-4.4.0-6.el5.i386.rpm5. rpm -ivh gcc-4.1.2-48.el5.i386.rpm6. rpm -ivh libstdc++-devel-4.1.2-48.el5.i386.rpm7. rpm -ivh gcc-c++-4.1.2-48.el5.i386.rpm8. rpm -ivh ncurses-5.5-24.20060715.i386.rpm9. rpm -ivh ncurses-devel-5.5-24.20060715.i386.rpm注意:在升级编译完内核,重启后提示如下错误信息:RedHat nash Version 5.1.19.6 startingrver(2.6.33.3)mount: could not find filesystem …/dev/root‟setuproot: moving /dev failed: No such file or directorysetuproot: error mounting /proc: No such file or directorysetuproot: error mounting /sys: No such file or directoryswitchroot: mount failed: No such file or directoryKernel panic – not syncing: Attempted to kill init![Linux-initrd @ 0x1fc37000,0x228585 bytes]于是在网上找了很多,也尝试了很多加模块、重编译了N次、改fstab等方法,都不行。

linux内核的裁剪与移植

linux内核的裁剪与移植

1,获得源码,解压,进入解压后的目录;命令;2,修改makefile;为了能让此目录被执行所以在顶级目录的makefile中同时也进行修改;3,得到.config文件;命令;编译内核时对.config文件的依赖比较大,我们需要一个自己的.config文件,又因为我们的板子和smdk2410的很像,仅需将smdk2410的.config 文件复制到顶级目录即可不用修改;4;修改nandflash 分区;此系统启动时从nandflash 中启动而我们的板子不是的所以对其进行必要的修改;5,添加网卡驱动;arch/arm/mach-s3c2410/mach-smdk2410.c开发板上已经配置要的相应的网卡,并且内核中也有相应的实现代码我们只需做一下简单的修改;6添加yaffz文件系统支持将yaffz 源码包考到和linux-2.6.24 同一级目录下解压;在给内核打上补丁;命令是;7、配置和编译内核到现在,一个简单的内核就准备好了,我们还需要做一些配置,然后编译,内核才能正常使用。

在内核源代码的根目录下运行make menuconfig命令,进入配置界面:8,用u-boot启动内核;编译U-Boot时在源代码的tools目录下会生成一个mkimage可执行文件,用这个工具可以对前面编译内核时生成的zImage进行处理,以供U-Boot启动。

cd linux-2.6.24.4/arch/arm/bootcp /up-Star2410/kernel/linux-2.6.24.4/mkimage . 获取mkimage工具./mkimage -A arm -T kernel -C none -O linux -a 0x30008000 -e 0x30008040 -d zImage -n 'Linux-2.6.24' uImage9,最后把生成的uimage 放到主机tftp同目录下,启动开发板;用u-boot的tftp命令下载到sdram;。

Linux内核配置移植及编译实验

Linux内核配置移植及编译实验

return platform_driver_register(&dm9k_driver); } 7.添加 YAFFS 文件系统支持 将我们提供的 YAFFS 的源代码 yaffs2.tar.gz 拷贝到 linux-2.6.24.4 的同 级目录下,解压该源码包,获得 YAFFS 源码: # pwd /root/2410-s # cp /mnt/hgfs/e/yaffs2.tar.gz ./ # tar zxvf yaffs2.tar.gz 然后进入 yaffs2 目录,运行./patch-ker.sh 给内核打上补丁: # cd yaffs2 # ./patch-ker.sh c ../linux-2.6.24.4/ 这样打好补丁以后,再做正确的配置,内核就可以支持 YAFFS 文件系统了。 8.配置和编译内核 到现在,一个简单的内核就准备好了,我们还需要做一些配置,然后编译, 内核才能正常使用。 在内核源代码的根目录下运行 make menuconfig 命令,进入配置界面: # make menuconfig (1)选择硬件系统 做如下选择: System Type --->
S3C2410 Machines ---> [*] SMDK2410/A9M2410 [ ] IPAQ H1940 [ ] Acer N30 [ ] Simtec Electronics BAST (EB2410ITX) [ ] NexVision OTOM Board [ ] AML M5900 Series [ ] Thorcom VR1000
.size = SZ_4M, }, [3] = {
.name = "User Space", .offset = 0x680000, .size = 0x1980000, }, }; 这样就把我们的 64M 的 NAND Flash 分为四个区: 第一个区从 0x00000000 到 0x00080000,大小为 0.5M 第二个区从 0x00080000 到 0x00280000,大小为 2M 第三个区从 0x00280000 到 0x00680000,大小为 4M 第四个区从 0x00680000 到 0x02000000,大小为 25.5M 5.添加 LCD 支持 我们的开发平台上配置有 640*480 的液晶屏,我们来为它加上驱动支持。 需要在 arch/arm/mach-s3c2410/mach-smdk2410.c 中添加一些内容。 # vi arch/arm/mach-s3c2410/mach-smdk2410.c 首先要包含我们的 LCD 使用的数据结构的头文件,增加如下内容: #include <asm-arm/arch-s3c2410/fb.h> #include <linux/platform_device.h> 然后添加如下内容: static struct s3c2410fb_display up2410_fb[] __initdata = { { .lcdcon5 = (1<<12)|(1<<11)|(1<<9)|(1<<8)|(1<<0), .type = (3<<5), .width = 640, .height = 480, .pixclock = 39721,

实验5 linux内核的裁剪移植

实验5 linux内核的裁剪移植

实验5 linux内核的裁剪移植一、实验目的:学习利用menuconfig配置文件进行裁减内核,编译内核并移植到开发板上。

二、实验内容一、开发环境宿主机:ubuntu10.04开发板:tiny6410编译器:4.3.2二、内核移植1.下载源码ftp:///pub/linux/kernel/v2.6/linux-2.6.38.tar.bz2此实验所需的文件放到/home/embedded/11目录下:linux-2.6.38.tar.bz2, yaffs2.tar.bz2s3c_nand.c , s3c_nand_mlc.fo ,nand_base.c ,Kconfig ,regs-nand.h2.解压(进入根目录下的/home/poplar/expr4/kernel目录,解压源码)# cd /home# mkdir poplar/expr4/kernel –p# cd /home/poplar/expr4/kernel# cp /home/embedded/11/linux-2.6.38.tar.bz2 ./tar xvfj /home/poplar/expr4/kernel/linux-2.6.38.tar.bz23.修改架构,编译器(需要在arm上运行,所以用交叉编译器)解压完进入解压出来的linux-2.6.38目录#cd linux-2.6.38#vi Makefile (或者用gedit)191行改为ARCH ?= arm //191行CROSS_COMPILE ?= /usr/local/arm/4.3.2/bin/arm-linux- (找到其交叉编译环境,把路径加全) //192行4.生成默认配置文件#cp arch/arm/configs/s3c6400_defconfig .config如省略这个操作的话 后面会找不到System Type Linux内核中已经自带了关于我们6410开发板的配置。

Linux2.6内核移植系列教程

Linux2.6内核移植系列教程

Linux2.6内核移植系列教程第一:Linux 2.6内核在S3C2440平台上移植此教程适合2.6.38之前的版本,其中2.6.35之前使用同一yaffs补丁包,2.6.36--2.6.28 yaffs文件系统有所改变,2.6.39之后的暂时不支持,源码下载请到:/1.解压linux-2.6.34.tar.bz2源码包#tar jxvf linux-2.6.34.tar.bz22.修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修改ARCH ? =armCROSS_COMPILE?=/usr/local/arm/4.3.2/bin/arm-linux-注意:交叉编译器的环境变量也需要改为4.3.2#export PATH=/usr/local/arm/4.3.2/bin/:$PATH其中ARCH变量用来决定:配置、编译时读取Linux源码arch目录下哪个体系结构的文件PATH 用来决定交叉编译器版本3.修改机器类型ID号Linux源码中支持多种平台的配置信息,内核会根据bootloader传进来的mach-types决定那份平台的代码起作用,本人手里的板子是仿照三星公司官方给出的demo板改版而来,所以采用arch/arm/mach-s3c2440/mach-smdk2440.c此配置文件,打开此文件,翻到最后,有以下信息:MACHINE_START(S3C2440, "SMDK2440")/* Maintainer: Ben Dooks <ben@> */.phys_io= S3C2410_PA_UART,.io_pg_offst= (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,.boot_params= S3C2410_SDRAM_PA + 0x100,.init_irq= s3c24xx_init_irq,.map_io= smdk2440_map_io,.init_machine= smdk2440_machine_init,.timer= &s3c24xx_timer,MACHINE_ENDMACHINE_START(S3C2440, "SMDK2440")决定了此板子的mach-types,可以在以下文件中找到S3C2440对应的具体数字,"arch/arm/tools/mach-types"文件查找S3C2440,362,这里刚好与我们的bootloader相同,所以不用做修改,直接保存退出即可,如果不同则根据bootloader的内容修改此文件,或根据此文件修改boorloader的内容(在vivi中可通过param show查看,u-boot在Y:\test\u-boot_src\u-boot_edu-2010.06\board\samsung\unsp2440\unsp2440.c文件:gd->bd->bi_arch_number = MACH_TYPE_S3C2440;中决定)。

嵌入式Linux内核的编译与移植

嵌入式Linux内核的编译与移植

计算技术与 自动化 ・
嵌入式 L u i x内核 的编译与移植 n
孙 昌霞, 郭玉峰
( 南农业大学信息与管理科学学 院, 河南 河

郑州 4 0 0 ) 5 0 2
要: 嵌入式 系统是一 个高起点 的技 术领域 , 而嵌入式 Ln x以 多方 面的优势 已成 为嵌 入式 系统领域研 究的一 个热点. iu 本文 首
# xot P T ¥ A H: sl a am 29 .bn epr A H: P T / ro l r /. 3 i,其 中: s u /c / 5/ /r u/
3 aex ng 基 于图形 窗 口模 式 的配 置界面 , wno ) k c f: m oi Xi w d
卜 ae o of : d i cn g配置 文件 , 只要求用 i 并且 户设定前次没有设定过的选项。 在这 4 方法 中, k e uof 种 mae m n eni g使用最为广泛 , 这里本文 也选择使用 m k n cn g的配置方 法.选择相应 的配置 时 , a emeuo f i 有三种选择 , 它们 分别代表 的含义如下:
使用 的功 能直接编译到 内核中, 比如网卡 、 光驱等。 3 . 2内核的配置 内核的配置过程其 实就是内核裁 剪的过程 , 嵌人式 Ln x内 iu 核要针对具体 的嵌入式设 备平 台软硬件需要, 裁减掉一些不必
要的功能后 , 这样可 以更 好 的节省 系统资源 , 提高 系统运行
“ ” 将该功能编译 进内核 Y一
lcl n , oa n为交叉编译 器的安装 目录。 /
“ " 不将该功能编译进 内核 N-
3 内核 编译
建立交 叉开发环 境之后,就可 以编译嵌 入式 L 的 内核 i 了。通常编译 嵌入式 Ln 内核都是通过不 同的 mae iu k 命令来实 现 的,它 的执行 配置 文件就 是通 常所说 的 Ma l,而不 同的 kf i M kf。 。 l 又通过互相 的依赖关系构成一个 统一的整体 去完成建 i 立依存关系 、 建立 内核等功能。

Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

printk(KERN_WARNING fmt, ##arg) printk(KERN_DEBUG fmt, ##arg)
/* Module Init & Exit function */ static int __init myModule_init(void) {
/* Module init code */ PRINTK("myModule_init\n"); return 0;
图形
工具
前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍 了模块的一种编译方式——在一个独立的文件夹通过makefile配合内核源码路径完成
那么如何将驱动直接编译进内核呢? 在我们实际内核的移植配置过程中经常听说的内核裁剪又是怎么麽回事呢? 我们在进行linux内核配置的时候经常会执行make menuconfig这个命令,然后屏幕上会出现以下 界面:
首页 业界 移动 云计算 研发 论坛 博客 下载 更多
process的专栏
您还未登录!| 登录 | 注册 | 帮助
个人资料
dianhuiren
访问:71424次 积分:1219分 排名:第8764名 原创:37篇 转载:127篇 译文:0篇 评论:3条
目录视图
摘要视图
订阅
《这些年,我们读过的技术经典图书》主题有奖征文 经理
这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。本文
/dianhuiren/article/details/6917132
1/5
2012年04月 (6) 2012年03月 (15) 2012年02月 (16)
并不是对配置系统本身进行分析,而是介绍如何使用配置系统。所以,除非是配置系统的维护者,一般 的内核开发者无须了解它们的原理,只需要知道如何编写 Makefile 和配置文件就可以。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
linux内核的配置编译与移植
周建设 zhoujianshe@
概要
Linux内核源码版本命名 Linux的内核构成 Linux内核的目录结构 Linux内核编译步骤
Linux内核源码版本命名
主版本号。次版本号。修改的次数 [root@localhost ~]# uname -r 2.6.18-92.el5xen
文件系统
bin Dev etc Lib Proc Sbin Tmp Usr Var
Usr/bin Usr/lib Usr/sbin
virt 内核虚拟机
清除目标文件ቤተ መጻሕፍቲ ባይዱ
Cleaning targets:
Linux内核编译步骤(一)
► make clean
remove most generated files but keep the config
► make mrproper
remove all generated files + config + various backup files
3.ECC校验 Drivers/mtd/nand/s3c2410.c UBOOT和内核校验算法不一样 chip->ecc.mode =NAND_ECC_SOFT--> 改为 chip->ecc.mode = NAND_ECC_NONE
4.文件系统的支持 修改 fs/Kconfig支持devfs 。 在Pseudo filesystems 主菜单的最后添加我们所要的内容。
Linux内核的目录结构
Kernel Linux大部分关键的核心功能都在这个目录实现 lib 库文件代码 mm 内存管理相关的代码 net 网络协议的实现代码
samples 一些内核编程的范例
Linux内核的目录结构
scripts 配置内核的脚步 security 安全管理模块 sound 音频设备的驱动程序 usr cpio命令实现
Linux内核编译步骤(二)
配置
config - Update current config utilising a line-oriented program menuconfig - Update current config utilising a menu based program xconfig - Update current config utilising a QT based front-end gconfig - Update current config utilising a GTK based front-end oldconfig - Update current config utilising a provided .config as base defconfig - New config with default answer to all options
Linux内核编译步骤(三)
编译
make zImage make bzImage
Makefile
Kconfig
Kbuild
移植
1、修改顶层Makefile 架构 arch 交叉编译器 2.分区 Uboot kernel fs /arch/arm/mach-s3c2410/common-smdk.c
Linux内核的目录结构
fs
存放各种文件系统的实现代码, 每个子目录对应一个文件系统的实现, 公用的源程序用于实现虚拟文件系统vfs
inculde
内核所需要的头文件。与平台无关的头文件放在include/linux子目录下, 与平台相关的头文件放在相应的子目录中
init
内核初始化代码
ipc
进程间通信的实现代码
文件系统补丁,mtd + yaffs /cgi-bin/viewcvs.cgi/#dirlist tar –zxvf yaffs2.tar.gz [root@Binnary ~ ]# cd yaffs2
2440 晶振
Machine ID
Make uImage
Linux体系结构
Linux内核的构成
虚拟文件系统VFS
Linux内核的目录结构
Linux内核的目录结构
arch
内核所支持的每种CPU体系,在该目录下都有对应的子目录
block
部分块设备驱动程序
crypto
加密、压缩、CRC校验算法
documentation
内核的文档
driver
设备驱动程序
相关文档
最新文档