linux内核移植(一)——linux内核简介

一:linux的起源

Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统,Linux最早是由芬兰黑客 Linus Torvalds为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。

二:linux内核版本

(1)linux0.01。初版,紧接着是0.02、0.03、0.10、0.11、0.12、0.95、0.96、0.97、0.98、0.99和之后的1.0。

(2)linux0.11。很多讲linux内核源代码解析的书都是以这个版本为原

本来讲。《图解linux内核设计的艺术》

(3)linux2.4。比较接近现代的版本,很多经典的书都是以2.4版本内

核为参照的,譬如《LDD3》。linux2.4的晚期内核在前几年还会经常

碰到有用的。

(4)linux2.6早期。2.6的早期和2.4晚期内核挺像的。

(5)linux2.6晚期。2.6的晚期内核较早期内核有一些改变,尤其是驱

动相关的部分和一些头文件的位置。2.6的晚期内核目前还算是比较主

流。

(6)linux3.x 4.x,现在的最新版本为linux4.7.1

三:内核和发行版区别

区别:内核是操作系统内核的简称,内核负责实现操作系统的核心

功能(资源管理模块,譬如内存管理、调度系统······),内核不包括

应用程序。所以说只有内核人是没法用的,因为人做任何事情都是通

过相应的应用程序来完成的。所以卖操作系统的人把内核和一些常用

的应用程序打包在一起提供给普通用户,这就是操作系统的发行版

(也就是普通意义上的操作系统)。

(1)内核只有一个。www.kernel.org

(2)发行版有很多。譬如ubuntu、redhat、suse、centos······

四:linux内核的模块化设计

1:什么是模块化设计

(1)因为linux内核很庞大,代码量很大、东西很多,如果设计时完全

设计成一体(各个文件、各个函数之间紧耦合),复杂度超出了人所

能理解的范围。所以模块化设计也是一种必要。

(2)模块化设计就是内核中各个功能模块在代码上是彼此独立的,譬如

说调度系统和内存管理系统之间并没有全局变量的互相引用,甚至函

数互相调用也很少,就算有也是遵循一个接口规范的。模块化设计的

目的就是实现功能模块的松耦合。

2:模块化设计的体现

(1)配置时可裁剪。linux内核在编译之前可以进行配置,配置时可以选择将组成内核的成千上万个模块每一个要或者不要。要了之后还有更多的一些细节的配置。

(2)模块化编译和安装。为了操作方便,逐渐从静态的升级变成了动态的升级(不需要重启系统,更不需要重新烧录系统)。这种动态的升级也是由模块化来支持的。

(3)源码中使用条件编译。这种在uboot中已经见过了。

时间: 2024-10-11 03:20:16

linux内核移植(一)——linux内核简介的相关文章

[Zedboard u-boot Linux系统移植]-Embedded Linux® Hands-on Tutorial for the ZedBoard?

本文翻译自Embedded Linux? Hands-on Tutorial for the ZedBoard? 本文主要是详细讲解zedboard硬件系统搭建,u-boot,linux-kernel移植,linaro文件系统移植.过程中需要生成的文件有system.bit,fsbl.elf,u-boot.elf,devicetree.dtb,uImage(zImage和uImage区别请看),linaro文件系统(linaro.org可以下载).具体的步骤可以参考Embedded Linux?

【课程分享】深入浅出嵌入式linux系统移植开发 (环境搭建、uboot的移植、嵌入式内核的配置与编译)

深入浅出嵌入式linux系统移植开发 (环境搭建.uboot的移植.嵌入式内核的配置与编译) 亲爱的网友,我这里有套课程想和大家分享,如果对这个课程有兴趣的,可以加我的QQ2059055336和我联系. 课程内容简介 本课程重点是给大家讲解嵌入式linux系统移植的开发方法,采用理论与实践,硬件与软件相结合的方法. 1.在每节开始之前先简单回顾上一节所讲的主要内容,并对本节所讲的内容先进行概述,讲解概念.技术要点,设计实现思路等内容,最后总结本次课程的要掌握的要点. 2.在讲课的过程中对关键技术

嵌入式linux系统移植开发视频教程

深入浅出嵌入式linux系统移植开发(环境搭建.uboot的移植.嵌入式内核的配置与编译) 课程讲师:韩老师 课程分类:Linux 适合人群:中级 课时数量:56课时 用到技术:嵌入式Linux开发模式 涉及项目:基于tftp烧写系统 咨询qq:1840215592 课程介绍: 本课程重点是给大家讲解嵌入式linux系统移植的开发方法,采用理论与实践,硬件与软件相结合的方法. 1.在每节开始之前先简单回顾上一节所讲的主要内容,并对本节所讲的内容先进行概述,讲解概念.技术要点,设计实现思路等内容,

基于tiny4412的Linux内核移植 -- 设备树的展开

作者信息 作者: 彭东林 邮箱:[email protected] QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本:Linux-4.4.0 (支持device tree) u-boot版本:友善之臂自带的 U-Boot 2010.12 (为支持uImage启动,做了少许改动) busybox版本:busybox 1.25 交叉编译工具链: arm-none-linux-gnueabi-gcc (gcc version 4

基于FL2440的3.6.6内核移植出现Uncompressing Linux... done, booting the kernel.

具体问题 参考解决方案 解决思路 深入解决 1.具体问题: 在移植3.6.6的内核后,下载启动卡死,具体是串口打印信息停留在"Uncompressing Linux- done, booting the kernel." 2. 参考解决方案: 依据网上的说法要确保如下情况: 2.1 内核的时钟频率正确 2.2 boot和kerel 配置一致的MACH_TYPE,即板子MACHINE ID 2.3 串口驱动配置正常 在内核配置device drivers->character de

【转】 linux内核移植和驱动添加(三)

原文网址:http://blog.chinaunix.net/uid-29589379-id-4708909.html 原文地址:linux内核移植和驱动添加(三) 作者:genehang 四,LED驱动的添加 1, 将led.c驱动文件拷贝到linux-3.1.4/drivers/char/目录下 [email protected]# pwd /change/linux-3.1.4/drivers/char [email protected]#  cp /mnt/hgfs/fh/driver/

【转】 linux内核移植和网卡驱动(二)

原文网址:http://blog.chinaunix.net/uid-29589379-id-4708911.html 一,内核移植步骤: 1, 修改顶层目录下的Makefile ARCH            ?= $(SUBARCH) CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%) 修改为: ARCH :=arm CROSS_COMPILE :=/usr/local/arm/4.4.3/bin/arm-linux- 2, 拷贝配置文

linux 3.4.103 内核移植到 S3C6410 开发板 移植失败 (问题总结,来日再战!)

linux 3.4.103 内核移植到 S3C6410 开发板 这个星期几乎就搭在这里面了,一开始感觉很不值得,移植这种浪费时间的事情,想立马搞定,然后安安静静看书 & coding. 坑爹的事情就是一个多星期的时间搭进去了,还是没成功.我把我的移植失败的经验留下来做为笔记,为下次做准备,也让和我一起做移植的道友少走弯路.大家一起共同分享经验,营造更好的开发环境. 查了很多资料,在此谢谢那些bloger, thanks for your spirit of sharing. 一. 从官网获得干净

Linux驱动学习之Linux-2.6.20.4内核移植

最近一段时间一直在学习向TQ2440开发板移植内核.移植驱动.真心觉得这方面的知识有很大的难度.但是从另一角度去看,难度越大,能力提升的空间就越大!! 1.解压源码 从网上下载一个Linux 内核,我是用的是Linux-2.6.20.4.然后用命令解压.建议解压到"/home/用户名"目录下.我的内核源码存放在: 2.添加对ARM的支持 因为所用的是TQ2440开发板,属于ARM9.因此要在系统中添加对ARM的支持. 方法:进入内核源码目录, 修改"Makefile"

linux 内核移植和根文件系统的制作

1.1 Linux内核基础知识 在动手进行Linux内核移植之前,非常有必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起. 1.1.1  Linux版本 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的Makefile中: VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 29 EXTRAVERSION = .1 其 中的“VERSION”和“PATCHLEVEL”组成主版本号,比如2.4.2.5