实验四 linux-2.6.35内核的编译和配置
Linux内核--基于Netfilter的内核级包过滤防火墙实现
Linux内核--基于Netfilter的内核级包过滤防火墙实现
测试内核版本:Linux Kernel 2.6.35----Linux Kernel 3.2.1
知识基础:本防火墙的开发基于对Linux内核网络栈有个良好的概念,本人对网络栈的分析是基于早期版本(Linux 1.2.13),在明确了网络栈架构的前提下,上升一步分析高级版本内核中的Netfilter防火墙实现原理,然后进行模块或内核编程,开发一款基于包过滤的个人防火墙。
包过滤防火墙:包过滤防火墙是用一个软件查看所流经的数据包的包头(header),由此决定整个包的命运。它可能会决定丢弃(DROP)这个包,可能会接受(ACCEPT)这个包(让这个包通过),也可能执行其它更复杂的动作。工作于网络层,能对IP数据报进行首部检查。例如:IP源地址,目的地址,源端口和目的端口等。
本防火墙的包过滤功能如下:
* 拒绝来自某主机或某网段的所有连接。
* 允许来自某主机或某网段的所有连接。
* 拒绝来自某主机或某网段的指定端口的连接。
* 允许来自某主机或某网段的指定端口的连接。
* 拒绝发去某主机或某网段的所有连接。
* 允许发去某主机或某网段的所有连接。
* 拒绝发去某主机或某网段的指定端口的连接。
* 允许发去某主机或某网段的指定端口的连接。
Netfilter框架是Linux内核分析和过滤特定协议数据包处理框架,为其他模块动态参与网络层数据包处理提供了方便的途径。
该防火墙的总体结构如下:
本防火墙的简单功能就是检查数据包是否符合过滤的条件,如果不符合就舍弃(Drop),否则就接受(Accept),这里定义八个链表头结点
内核2.6和xenomai构建实时linux操作系统
基于内核2.6和xenomai构建实时linux操作系统
摘要:
Linux是一类Unix计算机操作系统的统称。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软件和开放源代码发展中最著名的例子。本文主要论述在linux操作系统下安装XENOMAI实时软件。要在已安装的linux 操作系统上重新编译内核并且把XENOMAI的安装文件打到内核补丁上去。最后能够在新编译的内核中运行XENOMAI这个软件,得到实时性的数据。
关键词:linux;xenomai;编译内核;实时系统
第一章嵌入式实时操作系统
1.1嵌入式实时操作系统的简介
嵌入式操作系统是以应用为中心、以计算机技术为基础、软件硬件可剪裁、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。而嵌入式实时操作系统是当外界事件或数据产生时,能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统做出快速响应,并控制所有实时任务协调一致运行的嵌入式操作系统。随着计算机技术的迅速发展和芯片制造工艺的不断进步,嵌入式系统的应用日益广泛:从民用的电视、手机等电路设备到军用的飞机、坦克等武器系统,到处都有嵌入式系统的身影。在嵌入式系统的应用开发中,采用嵌入式实时操作系统(简称RTOS)能够支持多任务,使得程序开发更加容易,便于维护,同时能够提高系统的稳定性和可靠性。这已逐渐成为嵌入式系统开发的一个发展方向。
1.2 嵌入式实时操作系统发展历史
从1981年Ready System发展了世界上第1个商业嵌入式实时内核(VRTX32),到今天已经有近20年的历史。20世纪80年代的产品还只支持一些16位的微处理器,如68k,8086等。这时候的RTOS还只有内核,以销售二进制代码为主。当时的产品除VRTX外,还有IPI公司的MTOS和80年代末ISI 公司的PSOS。产品主要用于军事和电信设备。进入20世纪90年代,现代操作系统的设计思想,如微内核设计技术和模块化设计思想,开始渗入RTOS领域。老牌的RTOS厂家如Ready System(在1995年与Microtec Research合并),也推出新一代的VRTXsa实时内核,新一代的RTOS厂家Windriver推出了Vxwork。另外在这个时期,各家公司都有力求摆脱完全依赖第三方工具的制约,而通过自己收购、授权或使用免费工具链的方式,组成1套完整的开发环境。例如,ISI公司的Prismt、著名的Tornado(Windriver)和老牌的Spectra(VRTX开发系统)等。
操作系统课程设计实验报告(以Linux为例)
《操作系统课程设计》
实验报告
学号:
姓名:
苏州大学计算机科学与技术学院
2014年9月
操作系统课程设计实验报告
目录
目录 (1)
一、实验环境 (2)
二、实验报告总体要求 (2)
实验一编译L INUX内核 (3)
实验二观察L INUX行为 (7)
实验三进程间通信 (14)
操作系统课程设计实验报告
一、实验环境
Linux平台
◆硬件平台:普通PC机硬件环境。
◆操作系统:Linux环境,例如,红旗Linux或Red Hat Linux;启动
管理器使用GRUB。
◆编译环境:伴随着操作系统的默认gcc环境。
◆工作源码环境:一个调试的内核源码,版本不低于2.4.20。
二、实验报告总体要求
在2013年11月25日前提交实验报告。实验报告至少要求包含以下内容:
1.引言:概述本次实验所讨论的问题,工作步骤,结果,以及发现的意
义。
2.问题提出:叙述本篇报告要解决什么问题。注意不可以抄写实验要求
中的表述,要用自己的话重新组织我们这里所提出的问题。
3.解决方案:叙述如何解决自己上面提出的问题,可以用小标题 3.1,
3.2…等分开。这是实验报告的关键部分,请尽量展开来写。注意,
这部分是最终课程设计的基本分的部分。这部分不完成,本课程设计不会及格。
4.实验结果:按照自己的解决方案,有哪些结果。结果有异常吗?能解
释一下这些结果吗?同别人的结果比较过吗?注意,这部分是实验报告出彩的地方。本课程设计要得高分,应该在这部分下功夫。
5.结束语:小结并叙述本次课程设计的经验、教训、体会、难点、收获、
为解决的问题、新的疑惑等。
6.附录:加了注释的程序清单,注释行数目至少同源程序行数目比1:
制作linux的vhd,包括深度linux
发表于
收起solarEclipse
wan06
查看全部评分
Ubuntu 10.10 64
vboot 1.1
grub:
menuentry "VHD Ubuntu 10.10 64-bit, Linux 2.6.35-28-generic" {
insmod vhd
vhd vhd0 (hd0,6)/Ubuntu_64/Ubuntu 64-bit.vhd --partitions
linux (vhd0,1)/vboot/vmlinuz-2.6.35-28-generic root=/dev/sda6 vloop=/Ubuntu_64/Ubuntu 64-bit.vhd vlooppart=p1 quiet splash initrd (vhd0,1)/vboot/initrd.img-2.6.35-28-generic
initrd.img-2.6.35-28-generic和vmlinuz-2.6.35-28-generic 是sudo get升级好后复制出来的
放在c盘vboot目录里面
求助!!!
c盘主分区,d,e,f是逻辑分区
ls显示hd07 06 05 01
Linux内核编译过程详解
内核升级前的准备工作:
Linux系统进行内核升级或定制内核时需要安装GCC编译工具、make编译器,同时变异内核需要root权限。
安装GCC编译环境参考:/rhelinux/248.html
操作系统:RHEL 5.5
开始安装:按照以下顺序安装所需要的包就可以完成GCC的安装了
1. rpm -ivh kernel-headers-
2.6.18-194.el5.i386.rpm
2. rpm -ivh glibc-headers-2.5-49.i386.rpm
3. rpm -ivh glibc-devel-2.5-49.i386.rpm
4. rpm -ivh libgomp-4.4.0-6.el
5.i38
6.rpm
5. rpm -ivh gcc-4.1.2-48.el5.i38
6.rpm
6. rpm -ivh libstdc++-devel-4.1.2-48.el5.i386.rpm
7. rpm -ivh gcc-c++-4.1.2-48.el5.i386.rpm
8. rpm -ivh ncurses-5.5-24.20060715.i386.rpm
9. 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 directory
基于ARM平台Linux内核移植论文
基于ARM平台的Linux内核移植
中图分类号:tp 文献标识码:a 文章编号:1007-0745(2011)10-0204-01
摘要:linux是一个可移植性非常好的操作系统,它广泛支持了许多不同体系结构的计算机。可移植性是指代码从一种体系结构移植到另外一种不同的体系结构上的方便程度。本文介绍了基于arm 开发板的linux内核移植过程,主要包括二方面的内容:交叉编译器的安装、内核的配置与移植。本文要求读者具备一定的linux操作系统使用经验。
关键词:移植内核 linux
一、概述
一个嵌入式linux系统的启动顺序可以分为四步:1、引导加载程序(bootloader)。2、加载linux内核。3、挂载根文件系统。4、运行应用程序。所以要想使linux内核在开发板上运行,就必须对以上四步的相关源代码进行移植操作,使其可运行于嵌入式平台。本文主要介绍内核移植部分,其余部分可参考相应书箱或文档。
二、开发环境的建立
2.1、安装虚拟机、fedora13操作系统及相关的开发工具(gcc、gedit等),本文的所有操作均是在这种开发环境下进行,本文的工作目录为 \work,且都是在root权限下操作。
2.2、交叉编译器(arm-linux-gcc)的安装。
交叉编译器是嵌入式linux开发的基础,后续的移植过程都要
用到此编译器,在linux pc平台下,利用arm-linux-gcc编译器可编译出针对arm linux平台的可执行代码。安装过程如下:
a、网上获取arm-linux-gcc-4.3.2.tgz源代码包并保存于/work 目录中。
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.bz2
2.修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修改
ARCH ? =arm
CROSS_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 */
在ubuntu下编译linux内核的详细说明
一、实验目的
学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。
二、实验内容
在Linux操作系统环境下重新编译内核。实验主要内容:
A. 查找并且下载一份内核源代码,本实验使用最新的Linux内核2.6.36。
B. 配置内核。
C. 编译内核和模块。
D. 配置启动文件。
本次实验环境是Linux2.6.35内核的环境下,下载并重新编译内核源代码(2.6.36);然后,配置GNU的启动引导工具grub,成功运行编译成功的内核。
三、主要仪器设备(必填)
Linux环境:utuntu10.10,待编译内核:linux3.6.9
四、操作方法和实验步骤
【1】下载内核源代码
从/网站上下载新的Linux内核3.6.9。
【2】部署内核源代码
打开终端,更改用户权限为root。具体做法是在终端输入sudo su,然后按提示输入密码。判断是否是root用户是使用whoami命令,若输出为root则已经切换到root账户。
输入mv linux-3.6.9.tar.gz /usr/src,目的是把下载的内核源代码文件移到/usr/src目录。
输入cd /usr/src切换到该目录下。
输入tar zxvf linux-3.6.9.tar.gz,目的是解压内核包,生成的源代码放在linux-3.6.9目录下。
输入cd linux-3.6.9,切换到该目录下。
输入cp /boot/config-,然后按下Tab键,系统会自动填上该目录下符合条件的文件名,然后继续输入.config,目的是使用在boot目录下的原配置文件。
在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)
在前一篇文章提到,从源代码树下载下来的最新Android源代码,是不包括内核代码的,也就是Android源代码工程默认不包含Linux Kernel代码,而是使用预先编译好的内核,也就是prebuilt/android-arm/kernel/kernel-qemu文件。那么,如何才能DIY自己的内核呢?这篇文章一一道来。
一. 首选,参照前一篇在Ubuntu上下载、编译和安装Android最新源代码准备好Android源代码目录。
二. 下载Linux Kernel for Android源代码。
1. 使用GIT工具下载,执行以下命令:
USER-NAME@MACHINE-NAME:~/Android$ mkdir kernel
USER-NAME@MACHINE-NAME:~/Android$ cd kernel
USER-NAME@MACHINE-NAME:~/Android/kernel$ git clone
git:///kernel/common.git
同样是经过漫长的等待后,在kernel目录下有一个common目录,Linux内核代码就在这里了。
2. 下载完成后,可以查看下载的内核代码版本:
USER-NAME@MACHINE-NAME:~/Android/kernel$ cd common
USER-NAME@MACHINE-NAME:~/Android/kernel/common$ git branch android-2.6.36
3. 下载完Android的Linux内核代码后,会发现在arch/arm/configs下没有模拟器要使用的硬件配置文件
物联网平台说明书
物联网平台硬件简要说明书
一、硬件框图
二、平台资源介绍
1、 ARM处理器(网关节点)
基于ARM Cortex-A8的高性能处理器架构体系,低功耗、低成本、外设资源丰富,可安装Android 4.0。
频率从 600MHz到1GHz以上
NEON SIMD 指令集
Thumb-2 指令集编码
内置高性能的图形处理器SGX540
128 位 SIMD 数据引擎
2、 Zigbee模块
2.1 CC2530模块(协调器、终端节点)
CC2530模块由CC2530芯片模块+底板模块组成(底板模块用于接口扩展)。CC2530模块中包括一个协调器模块,其他用于终端节点模块。协调器模块接一个LCD面板,可用于跟踪显示Zigbee建
网信息,终端节点接各种传感器。
2.2 传感器模块
(1)光敏传感器
(2)烟雾传感器
(4)温湿度传感器
(5)火焰传感器
(6)气体传感器
(7)热释红传感器
(8) 磁通传感器
3、RFID 设备模块
(1) RFID模块
(2) RFID标签
4 、蓝牙模块
(1)主蓝牙模块
(2)从蓝牙模块,可接多种传感器
5、CC-Dubug 仿真器,RS232
CC-Dubug用于烧写或调试Zigbee 模块,RS232用于zigbee模块与上位机信息交互
6、开关选择模块
选择特定的zigbee模块烧写程序或与上位机串口通信
三、配件方案
1 ARM处理器
方案一:
(1)购买
(2)推荐产品:友善之臂Tiny210SDK2+LCD
(3)价格:799-1099,不包括配件
(4)可选配件:3G上网卡,SD WIFI ,CMOS摄像头,监控摄像头模块,GPRS模块
Linux内核的编译,安装与问题处理
目录
1、从linux2.4内核升级到linux2.6内核的步骤 (1)
2、RPM无法使用的问题 (6)
3、英文版RedHat无法显示中文字体的问题 (6)
4、内核升级后出现CD无法挂载的情况 (7)
1、从linux2.4内核升级到linux2.6内核的步骤本文的具体工作是将linux2.4.20-8升级到linux2.6.15.5的步骤,升级到其它2.6.x版本的与此类似。
一、准备工作
首先说明,下面带#号的行都是要输入的命令行,且本文提到的所有命令行都在终端里输入。
启动Linux系统,并用根用户登录,进入终端模式下。
1、查看Linux内核版本# uname -a
如果屏幕显示的是2.6.x,说明你的已经是2.6的内核,也用不着看下文了,该干什么干什么去吧!~~~如果显示的是2.4.x,那恭喜你,闯关通过,赶快进行下一步。
2、下载2.6内核源码
下载地址:/pub/linux/kernel/v2.6/linux-2.6.15.5.tar.bz2
3、下载内核升级工具
由于linux2.6内核的内核模块处理过程有所改变,因此linux2.4内核下的modutils工具包已经不再适合linux2.6内核,需要下载较新版本的module-init-tools和modutils,笔者下载的是
module-init-tools-3.2.2.tar.bz2和modutils-2.4.5-1.src.rpm
(1)下载module-init-tools-3.2.2.tar.bz2
/pub/linux/utils/kernel/module-init-tools/
编译Linux内核
编译Linux内核
实验目的
学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。
实验内容
重新编译内核是一件比你想像的还要简单的事情,它甚至不需要你对内核有任何的了解,只要你具备一些基本的Linux操作系统的知识就可以进行。
本次实验,要求你在RedHat Fedora Core 5的Linux系统里,下载并重新编译其内核源代码(版本号KERNEL-2.6.15-1.2054);然后,配置GNU的启动引导工具grub,成功运行你刚刚编译成功的Linux内核。
实验提示
Linux是当今流行的操作系统之一。由于其源码的开放性,现代操作系统设计的思想和技术能够不断运用于它的新版本中。因此,读懂并修改Linux内核源代码无疑是学习操作系统设计技术的有效方法。本实验首先介绍Linux内核的特点、源码结构和重新编译内核的方法,讲述如何通过Linux系统所提供的/proc虚拟文件系统了解操作系统运行状况的方法。最后,对Linux编程环境中的常用工具也有简单介绍。
1.1查找并且下载一份内核源代码
我们知道,Linux受GNU通用公共许可证(GPL)保护,其内核源代码是完全开放的。现在很多Linux的网站都提供内核代码的下载。推荐你使用Linux的官方网站: ,如图1-1。在这里你可以找到所有的内核版本。
图1-1 Linux的官方网站
由于作者安装的Fedora Core 5并不附带内核源代码,第一步首先想办法获取合适版本的Linux内核代码。通过命令
# uname –r
2.6.15-1.2054_FC5
Linux系统时间不准问题分析
.rating = 400,
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
.mask = CLOCKSOURCE_MASK(64),
.shiftwk.baidu.com= 22,
.mult = 0,/* To be filled in */
.read = timebase_read,
Linux
CPU:PowerPC P1020RDB-PC
OS:Linux-2.6.35
问题:系统跑一段时间后,执行date和hwclock分别获取系统时钟和rtc时钟,出现差异,
差异为sysclk时间比rtc每分钟慢0.6秒。误差是比较大了。
一、问题分析
1.转换误差
2.时钟不稳定
3.时钟频率不对
二、结构分析
* @mult:pointer to mult variable
* @shift:pointer to shift variable
* @from:frequency to convert from
* @to:frequency to convert to
* @minsec:guaranteed runtime conversion range in seconds
{
return mftb();
Linux2.6内核配置详解
7.
[*] Automatic kernel module loading
复制代码
Enable loadable module support,很多人喜欢将全部功能、硬件支持一股脑的编 进内核,而不是使用模块的方式。这样做非常不好(个
人觉得)。其实我也做过嵌入式的开发,在针 对特定硬件的平台下尽可能将内核编小,将始终是支持 模块加载的。例如我们开发的防火墙就是做为内核的模 块被加载的。使用模块支持,你的系统能具有更好的可 扩充性。还有一个原因就是自己编写的功能模块、设备 驱动模块(假设编写的质量不高)以模块方式工作引起
12.
[*] Kernel Userspace Events
13.
[*] Kernel .config support
14.
[*] Enable access to .config through
/proc/config.gz
ห้องสมุดไป่ตู้
15.
[*] Configure standard kernel features
[linux 内核] 2.6 内核的配置与编译
首先对内核进行菜单配置,
代码:
1. cd /usr/src/linux 2. make menuconfig
复制代码
代码成熟度选项,
代码:
1. Code maturity level options --->
linux内核编译过程解释
linux内核编译过程解释
Linux内核是操作系统的核心部分,它控制着系统的资源管理、任务调度、驱动程序等重要功能。编译Linux内核是一项非常重要的任务,因为它决定了系统的性能、稳定性和可靠性。下面我们来了解一下Linux内核的编译过程。
1. 下载内核源代码:首先,我们需要从官方网站上下载Linux
内核的源代码。这里我们可以选择下载最新的稳定版本或者是开发版,具体取决于我们的需求。
2. 配置内核选项:下载完源代码后,我们需要对内核进行配置。这一步通常需要使用make menuconfig命令来完成。在配置过程中,我们需要选择系统所需的各种驱动程序和功能选项,以及定制化内核参数等。
3. 编译内核:配置完成后,我们可以使用make命令开始编译内核。编译过程中会生成一些中间文件和可执行文件,同时也会编译各种驱动程序和功能选项。
4. 安装内核:编译完成后,我们可以使用make install命令将内核安装到系统中。这一步通常需要将内核文件复制到/boot目录下,并更新系统的引导程序以便正确加载新内核。
5. 重启系统:安装完成后,我们需要重启系统以使新内核生效。如果新内核配置正确,系统应该能顺利地启动并正常工作。
总的来说,Linux内核的编译过程是一个相对复杂的过程,需要一定的技术和操作经验。但是,通过了解和掌握相关的编译技巧和命
令,我们可以轻松地完成内核编译工作,并为系统的性能和稳定性做出贡献。
嵌入式linux系统移植试题-答案
嵌入式Linux系统移植试题(时间:60分钟)
一、单项选择题(每题2分,共40分)
1.嵌入式linux系统移植不包括(D)
[A] bootloader [B] linux内核 [C] 根文件系统 [D] 应用程序
2.下列选项中符合gcc的编译流程的是(A )
[A] 预处理->编译->汇编->连接[B] 预处理->汇编->编译->连接 [C] 编译->预
处理->汇编->连接 [D] 预处理->连接->汇编->编译
3.下列二进制工具哪个是丢弃目标文件的全部或者特定符号,减少文件体积的( D )
[A] size [B] as [C] nm [D] strip
4.下列二进制工具哪个是用来反汇编的(B)
[A] nm [B] objdump [C] objcopy [D] string
5.下列二进制工具哪个是用来进行目标格式转换的(C )
[A] nm [B] objdump [C] objcopy [D] string
6.下列二进制工具哪个是用来把程序地址转换为文件名和行号的( D)
[A] nm [B] objdump [C] objcopy [D] addr2line
7.FS4412开发平台上,uImage被解压到什么地址(B)
[A] 0x [B] 0x [C] 0x [D] 0x43e00000
8.编译Linux内核设备树文件使用什么命令(D)
[A] make dtbi [B] make tags [C] make dtb [D] make dtbs
9.linux要求bootloader在运行内核前,让系统进入何种模式(B)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四 linux-2.6.35内核的编译和配置
【实验目的】
了解内核的编译过程及配置选项的内容
【实验环境】
1、 Ubuntu 10.10发行版
2、 u-boot-2010.03
3、 FS2410平台
4、 交叉编译器 arm-none-linux-gnueabi-gcc-4.3.2
【实验步骤】
实验步骤中的1-4,已经做过就不要重复了
1、 将实验代码中的rootfs.tar.bz2解压到/source 下,已经做过就不要重复了 $ tar xvf rootfs.tar.bz2 –C /source
2、 解压内核并进入内核目录
$ tar xvf linux-2.6.35.tar.bz2
$ cd linux-2.6.35
3、 修改Makefile
修改linux-2.6.35 目录下的Makefile ,找到
ARCH ?= $(SUBARCH)
CROSS_COMPILE
?= 改为
ARCH ?= arm CROSS_COMPILE
?= arm-none-linux-gnueabi-
4、 配置内核 设置平台
设置编译工具
make menuconfig
Kernel Features --->
[*] Use the ARM EABI to compile the kernel
[*] Allow old ABI binaries to run with this kernel (EXPERIMENTAL)
5、添加驱动文件
将实验代码2410GPIO_TEST_26/2410GPIO_TEST_drv.c拷贝到drivers/char下
6、修改对应Kconfig
修改drivers/char/Kconfig,在menu "Character devices"下面
加入如下内容:
config 2410GPIO_TEST_DRV
tristate "S3C2410 test drv Device Support"
depends on ARCH_S3C2410
---help---
support led test device driver on FS2410 develop board
7、修改对应Makefile
在drivers/char/Makefile 中
找到在obj-$(CONFIG_HANGCHECK_TIMER) += hangcheck-timer.o ,
在其下一行添加:
obj-$(CONFIG_2410GPIO_TEST_DRV) += 2410GPIO_TEST_drv.o
8、静态编译内核
Ø配置内核时按“空格”选择,配置完成后保存退出
$ make menuconfig
Device Drivers --->
Character devices --->
<*> S3C2410 test drv Device Support
Ø重新编译内核并把内核拷贝到tftpboot下
$ make zImage
$ cp arch/arm/boot/zImage /tftpboot
Ø 编译应用程序 $ arm-none-linux-gnueabi-gcc 2410GPIO_TEST_APP.c –o 2410GPIO_TEST_APP $ cp 2410GPIO_TEST_APP /source/rootfs
下面的操作开发板上操作
Ø 设置u-boot 环境变量,IP 地址改成自己环境的值
# setenv serverip 192.168.1.2
# setenv ipaddr 192.168.1.3
# setenv bootcmd tftp 33000000 zImage\;go 33000000
# setenv bootargs root=nfs nfsroot=192.168.1.2:/source/rootfs console=ttySAC0,115200 init=/linuxrc ip=192.168.1.3
# savenv
重新启动系统,内核启动进入shell 操作界面后,在开发板上操作
Ø 创建设备节点
# mknod /dev/GPIO_TEST c 252 0
Ø 运行2410GPIO_TEST_APP 并查看开发板LED 状态
# ./2410GPIO_TEST_APP
9、 动态编译内核
Ø 配置内核时按“空格”选择,配置完成后保存退出
$ make menuconfig
Device Drivers --->
Character devices --->
Ø 重新编译内核并把内核拷贝到tftpboot 下,并把驱动模块拷贝到/source/rootfs 下 $ make zImage
$ make modules
随便找个地方编译不要在linux 码源文件夹下
生成模块丆要多这一步saveenv
$ cp arch/arm/boot/zImage /tftpboot
$ cp drivers/char/2410GPIO_TEST_drv.ko /source/rootfs
Ø编译应用程序并将它拷贝到/source/rootfs下,前面做过的话就不要重复了$ arm-none-linux-gnueabi-gcc 2410GPIO_TEST_APP.c –o 2410GPIO_TEST_APP $ cp 2410GPIO_TEST_APP /source/rootfs
重新启动系统
Ø创建设备节点
# mknod /dev/GPIO_TEST c 252 0
加载模块
insmod 2410GPIO_TEST_drv.ko
Ø运行2410GPIO_TEST_APP并查看开发板LED状态
# ./2410GPIO_TEST_APP
rmmod 2410GPIO_TEST_drv.o 卸载模块