内核_内核编译
- 格式:ppt
- 大小:569.50 KB
- 文档页数:60


我是在UBUNTU环境下编译的,怎么安装就省略了,直接开始吧。
首先是
sudo apt-get install gcc g++ binutils patch bzip2 flex bison make autoconf gettext texinfo
unzip sharutils subversion libncurses5-dev ncurses-term
zlib1g-dev
可能make
menuconfig的时候提示缺少AWK的,可以这样sudo apt-get install gawk
然后是下载源码
TRUNK版的是
svn
checkout svn:///openwrt/trunk
cd trunk
./scripts/feeds update -a
./scripts/feeds install -a
DREAMBOX版的是
svn co svn:///dreambox/backfire openwrt-dreambox
cd openwrt-dreambox
./scripts/feeds update -a
./scripts/feeds install -a
然后就是make menuconfig
我以841n v3做例子,编个带USB脱机下载的固件
其实选哪个我也不怎么清楚,大家可以参考别人编译的openwrt里面有哪些软件包、
841的USB是改出来的所以直接编译是没有USB的
下面添加USB支持
打开trunk/target/linux/ar71xx/files/arch/mips/ath79
貌似841n v3用的是mach-tl-wr941nd.c而不是mach-tl-wr841nd.c保险起见我两个都换
旁边那1043的是带USB的,借鉴一下?
发现缺什么了不?顺便看看1041n
下面是改8M,
/trunk/target/linux/ar71xx/image/makefile
201 1年第4期 福建 电脑 149 编译 Linux2.6内 核并添加一个系统调用 张伟华.王海英。高静 (河南财经政法大学成功学院河南郑州451200) 【摘 要】:本文以实例来详细描述了从准备一直到使用新内核的Linux2。6内核编译过程,然后介绍了 添加系统调用的实现步骤,最后给实验结果。 【关键词】:Linux,内核,编译内核,系统调用 引言 Linux【 1作为一个自由软件.在广大爱好者的支持 下.内核版本不断更新也不断增大。通过编译内核可以 轻易地对它进行修改.使我们能够根据自己的要求度 身定制一个更高效、更稳定的内核。 系统调用【2]是用户进程与系统之间的接口,它们在 内核中实现.其主要目的是使得用户可以使用操作系 统提供的操作底层设备的功能 用户程序肯定要操作 系统设备.没有系统调用,程序员就需要了解硬件细节 才能写出强大程序.这显然不利于将精力集中在解决 问题上 学习操作系统设计技术的有效方法就是读懂并修 改Linux的源代码.编译内核和添加系统调用就是比 较基础的内容.本文就以这两部分来展开:一是编译内 核.二是添加系统调用。 一、编译内核 1.到ftp://ftp.kerne1.org/pub/linux/kemel/v2.6/中找 到相关版本的压缩包linUX一2.6.15.1.tar.bz2或linux一2. 6.15.I.tar.gz 2.首先cp命令或mv命令将压缩包放到,usr/src/ redhaffSOURCES/下,解压缩包:tar—jxvf linux一2.6.15. 1.tar.bz2(对应于.bz2文件)或tar—xzvf linux一2.6.15.1. tar.gz(对应于.tar.gz(.tgz) ̄件) 3.在,usr/src/redhat/SOURCES/下得到解压后的文 件linux一2.6.15.1.并设置路径:cd/usdsrc/redhaff SOURCES/1inux-2.6.15.1.一定要保证路径正确,make 的有关命令一般在此目录下 4.make mrproper.该命令确保目录下没有相关的 文件和编译设置.如果已经编译过linux内核,最好使 用本命令 5.make menuconfig,自己配置编译选项,建议保 留默认值,或者在当前linux一2.6.15.1目录下使用叩/ usr/src/kemels?uname—r'/.config.config将原来的配置 文件拷贝过来。 6.make cl。an,删除不必要的模块和文件 7.make bzImage,编译内核并在/usr/src/redhaff SOURCES/linux一2.6.15.1/arch/i386/boot目录下生成内 核程序文件bzImage 8.make modules.内核模块的编译 9.make medules instal1.内核模块安装 10.让新内核和旧内核都可以加载的配置的步骤: my./arch/i386/boot/bzlmage/boot mv./System.map/boot mv/boot/bzlmage/bot/vmlinuz-2.6.15.1.0503 mv/bot/System.map/boo',JSystem.map-2.6.15.1.0503 mkinitrd/boginitrd-2.6.15.1.0503.img 2.6.15 1 vi/bot/grub/grub.eonf 在最后添加上: title Linux AS r2.6.15.1.0503) root【hdO,o) kernel/vmlinuz-2.6.1 1.1.0503 re root=/dev/VolGmup00/LogVo100 enforcing=0 rhgb quiet initrd/initrd-2.6.11.1.0503.img 保存后.reboot 设置采用新内核启动:启动时在grub界面按住e 进行编辑.按上下键选择刚刚的新内核,按Enter键启 动。 二 添加系统调用 可以用两种方法来添加系统调用:第一种方法是 通过修改内核代码增加系统调用;第二种方法是利用 内核模块机制添加系统调用 第一种方法因为修改了 内核代码.所以需要重新编译内核.而第二种方法是将 系统调用作为可加载的内核模块.所以不用重新编译 整个内核.只要编译相应的模块。当然两者各有利弊。 但是一般情况下.内核中极为重要的地方,是难以通过 内核模块实现的.必须直接对内核进行修改。这里我们 采用第一种方法 涉及到文件有:lusdsrclredhat]SOURCESIlinux一2.6. 15.1目录下. ./areh/i386/kemel/entry.S ./include/asm—i386/unistd.h ./kemel/sys.e ./areh/i386/kemel/syseall table.S 1.添加系统调用号表 cd/usr/sre/redhaffSOURCES/linux-2.6.15.1
使用YOCTO编译环境修改内核源码的方法
YOCTO Project是一个开放源代码项目,为嵌入式Linux开发提供了一个灵活的框架。它允许开发人员根据自己的需求构建一个定制的Linux发行版,包括内核、设备驱动和用户空间组件。在YOCTO Project中修改内核源码的方法可以分为以下几个步骤:
1.准备开发环境:
在开始之前,需要安装好YOCTO Project的开发环境。详细的安装过程可以参考YOCTO Project的官方文档。安装完成后,需要设置好环境变量,以便可以使用YOCTO Project的工具链。
2.获取内核源码:
YOCTO Project使用BitBake构建系统来构建Linux发行版。内核源码在YOCTO Project中是使用git管理的,可以通过git命令来获取。首先需要指定要使用的内核版本,然后使用git clone命令来获取源码。
3.创建内核工作目录:
在YOCTO Project中,涉及到对内核进行修改时,最好是在源码目录以外创建一个工作目录来进行操作,以免影响原有的源码。
4.配置内核:
进入内核工作目录后,可以使用bitbake -c menuconfig
virtual/kernel命令来配置内核。这将打开一个配置菜单,可以对内核进行各种设置。可以根据项目需求来进行配置,如开启一些硬件支持、关闭不需要的功能等。
5.修改内核源码: 6.构建内核:
修改完成后,需要构建内核以生成相应的内核镜像。可以使用bitbake virtual/kernel命令进行构建。构建过程中,YOCTO Project将自动将修改的文件编译为目标文件,并将其添加到最终生成的内核镜像中。
7.安装内核:
构建完成后,可以使用bitbake virtual/kernel -c deploy命令将内核安装到目标设备上。安装过程中,生成的内核镜像将被复制到目标设备的指定位置。
8.配置设备:
Linux 2.6.19.x内核编译配置选项简介(2)
Security Marking
对网络包进行安全标记,类似于nfmark,但主要是为安全目的而设计,如果你不明白的话就别选
Network packet filtering (replaces ipchains)
Netfilter可以对数据包进行过滤和修改,可以作为防火墙("packet filter"或"proxy-based")或网关(NAT)或代理(proxy)或网桥使用.选中此选项后必须将"Fast switching"关闭,否则将前功尽弃
Network packet filtering debugging
仅供开发者调试Netfilter使用
Bridged IP/ARP packets filtering
如果你希望使用一个针对桥接的防火墙就打开它
Core Netfilter Configuration
核心Netfilter配置(当包流过Chain时如果match某个规则那么将由该规则的target来处理,否则将由同一个Chain中的下一个规则进行匹配,若不match所有规则那么最终将由该Chain的policy进行处理)
Netfilter netlink interface
允许Netfilter在与用户空间通信时使用新的netlink接口.netlink Socket是Linux用户态与内核态交流的主要方法之一,且越来越被重视
Netfilter NFQUEUE over NFNETLINK interface
通过NFNETLINK接口对包进行排队
Netfilter LOG over NFNETLINK interface
通过NFNETLINK接口对包记录.该选项废弃了ipt_ULOG和ebg_ulog机制,并打算在将来废弃基于syslog的ipt_LOG和ip6t_LOG模块