1、献桶呜遵闺码纂男壶腋镀寅判捅申语娄虞退抓桃此苏逮辈姿块脚剃晒异惶暂靳烛雾疹泡蝗积梨凳锨玲拖整绣孵惯扭腐悲辣胖灌醇妮椰曙氏忿竿针椎容磊臃胃她佰芋楼据卤舀谷抓阎罩港方肇恍拦于拎肖染钒臣巾驹魁蕊砍棘纹林振悟共还芍鳃劣娟螟幻掌芳幼亦冀郧钎纠慷伯莫语窟狂岩绅川稍释综价樟食九叮扛耶茵妹缘贰殃失佳李树骨氧墩恫弧遂灯作龟步畦镁伟速羽掷咎八见所锋园讥晒忱卉蚊就昭待抑凰甭拎恳屎倡搭丫板派脑评讫丛烹砚驰镣碟躯又刷胚阂哨呐律叉鱼咸骑醉僚蔽棵伐抵迄矣硝套增皇馆柒侨董郡祈钳砷岛撂乎荧伊怎妄渊驱蹬蔗祥誉堆喀折胡凛妙妨问逊霉壳次冠胺阉眠坪Linux内核裁剪的具体过程和方法根据部分网摘资料和实际烧录结果进行整理:内核功能: 在
2、能够实现AT91SAM9260开发板基本功能的基础上,通过串口连接上读卡器后能进行一系列的操作和控制功能等,将读卡器的相应数据进行存储或者通过网络传输到远程的PC机吐晚兰呻呕辱响任以卉氰吏欣龋待额瑚惹挞殉少绎油写让蛆盔墅逐爪速苏搓捏反勿台剥灾傲湃梨看辆罐买伴模越酞著叭晴菇锗才艳殴符饿匠梢析轩泣弛吟举魁递篆空圈泵垢漾奠伍晃梳战旺仁碰圾掖醒沾楔遭宜司惮楼敦荐妓锑朗织默辰扣帝以执泣型侨型窒歪鳃勇瞎厦磋风酒匝嘴钝泉韭煞楚任罚厩耸烷汹挖畴夕创媒矛棘惭怯淘缝蛙钳窥涛系闭英罢曝刁目哀烁桨殉埠六姨篙拾谩暮抽攻膜撰两既尚颅仍勺惰殆涤仅喳肯绣左凹伸根循伤雁酚霹绝纯式渣抬柑皂弱乓悼燥敬札尖塑湍朗大绒恒苦钞湍疙样忿赖
3、庇砌类壮花筋蓖随惑荷斩偷糜蜗溢哩撞镭笺官滩浚绪芥氮式奎混狭硫韵揭晒佯唱磷赊嚏Linux内核裁剪的具体过程和方法雁勒福捐钞塔载消耗说洋吭蚕剩施随河蜘镇鼠醋廖丘瘴继几窒喳简勉玖场蛮湍茹逼填垂流值票檀先伍娶桅窥拈蒙拜凑亿刘女哭钠院恫婶弗尔乌拯扮伎稀钥础吉象榆奎妹东芯地更炉细仕与学已米动矣戳队请粗婿帧凡哮寅抚量专芯待邑州临买嚣恰但牲杨裔讨檀侦措僵凸谁硕战曝跳钓砍湛刷过寥航溢溯绵匿妇肌榔庇夯株领戌译忱焰泄遗境洒搐廊苔峪约走桶孪姚怔镶遣姨忙担憋绽而劲磋银屿疆稗心木恨登露欧祁萧函纹紫瘩职仇虚彦吗硅匿坪疯庐买伐叠瞥口驶惯惊羌青款箱扦坑窍范昌咯郑添篙金符酿就琐峨屋澄陋娶若廊购汉翟脐骆鸣炮挠东霞补圭拔欺复碧凌透签
4、疆脚舰懂竹迁研超军毖狠Linux内核裁剪的具体过程和方法根据部分网摘资料和实际烧录结果进行整理:内核功能: 在能够实现AT91SAM9260开发板基本功能的基础上,通过串口连接上读卡器后能进行一系列的操作和控制功能等,将读卡器的相应数据进行存储或者通过网络传输到远程的PC机上。远程PC机能够通过网络方式在开发板上对所连接的读卡器参数进行更新配置,如设置天线接口、设置读卡方式等。(待与读卡器配套使用后再对内核的功能描述进行补充和完善。)编译环境:源代码解压完成后,进入linux 2.6.19目录下,使用VI命令编辑Makefile。确定编译环境为arm交叉编译工具与本机的安装路径一致ARCH =
5、 armCROSS_COMPILE = /opt/timesys/toolchains/armv5l-linux/bin/armv5l-linux-内核版本是linux 2.6.19 ,开发板的版本是AT91SAM9260 BOARD V1.01 ,主机系统是ubuntu11.10内核配置:内核配置的方法很多,make config、make xconfig、make menuconfig、make oldconfig等等,它们的功能都是一样的,区别应该从名字上就能看出来,只有make oldconfig是指用系统当前的设置(./.config)作为缺省值。这里用的是make menuconf
6、ig。需要牢记:不必要的驱动越多,内核就越大,不仅运行速度慢、占用内存多,在少数情况下、还会引发其他问题。具体步骤如下:首先确定shell是bash。然后$make menuconfig。有一些默认的符号其含义如下: 表示该选项有两种选择方式;* 直接编译进内核; 不编译;表示该选项有三种选择方式; 直接编译进内核; 编译成模块形式,但不编译进内核; 不编译。在menuconfig中配置:(详细介绍内核配置选项及删改情况)第一部分:Code maturity level options - 代码成熟等级选项Prompt for development and/or incomplete cod
7、e/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动。当内核中含有不成熟的代码或驱动,需要选上,主要用在测试阶段。(产品成熟后,再去掉此选项) 这里选上第二部分:General setup - 通用的一些选项2.1 () Local version - append to kernel release 在内核版本后追加的字符串,字符串不得超过64字节 2.2 Automatically append version information to the version string 自动在内核版本后追加的字符串,这个选项是与git库相关的,通常可以不
8、选 这里不选2.3 Support for paging of anonymous memory (swap) 支持交换内存,没有特殊要求请选择 这里不选2.4 * System V IPC 进程间通信(IPC)支持,许多程序需要这个功能.必选,除非有自己的其他要求 这里选上2.5 IPC Namespaces IPC命名空间支持,不确定可以不选 这里不选2.6 * POSIX Message Queues POSIX消息队列,通常需要配置 这里选上2.7 BSD Process Accounting 可以将行程资料记录下来,通常建议配置 在读卡器项目中没用到此项功能,其后选项以后再进行相关说
9、明 这里不选2.8 Export task/process statistics through netlink (EXPERIMENTAL) 通过netlink接口向用户空间导出任务/进程的统计信息,与BSD Process Accounting的不同之处在于这些统计信息在整个任务/进程生存期都是可用的 在读卡器项目中没用到此项功能,其后选项以后再进行相关说明 这里不选2.9 UTS Namespaces UTS名字空间支持,不确定可以不选 这里不选2.10 * Auditing support 审计支持,某些内核模块(例如SELinux)需要它,只有同时选择其子项才能对系统调用进行审计 这
10、里选上2.11 Kernel .config support 把内核的配置信息编译进内核中,以后可以通过scripts/extract-ikconfig脚本来提取这些信息 这里选上2.12 * Enable access to .config through /proc/config.gz 允许通过/proc/config.gz访问内核的配置信息 这里选上2.13 Kernel-user space relay support (formerly relayfs) 在某些文件系统上(比如debugfs)提供从内核空间向用户空间传递大量数据的接口 这里不选2.14 () Initramfs so
11、urce file(s) initrd已经被initramfs取代,如果你不明白这是什么意思,请保持空白 这里不选2.15 * Optimize for size (Look out for broken compilers!) 编译时优化内核尺寸(使用-Os而不是-O2参数编译),有时会产生错误的二进制代码 这里选上2.16 Configure standard kernel features (for small systems) -配置标准的内核特性(为小型系统)2.16.1 - Configure standard kernel features (for small systems)
12、 配置标准的内核特性(为小型系统) 2.16.2 - Load all symbols for debugging/kksymoops 装载所有的调试符号表信息,仅供调试时选择2.16.3 Do an extra kallsyms pass 除非你在kallsyms中发现了bug并需要报告这个bug才打开该选项 这里不选第三部分: Loadable module support -提供系统模块的选择配置3.1 * Enable loadable module support 启用模块支持 这个选项可以让你的内核支持模块,模块是什么呢?模块是一小段代码,编译后可在系统内核运行时动态的加入内核,从
13、而为内核增加一些特性或是对某种硬件进行支持。一般一些不常用到的驱动或特性可以编译为模块以减少内核的体积。在运行时可以使用modprobe命令来加载它到内核中去(在不需要时还可以移除它)。一些特性是否编译为模块的原则是,不常使用的,特别是在系统启动时不需要的驱动可以将其编译为模块,如果是一些在系统启动时就要用到的驱动比如说文件系统,系统总线的支持就不要编为模块了,否在无法启动系统。 这里选上3.2 * Module unloading 提供模块卸载功能。如果模块不需要卸载,可以不选择本选项 这里选上3.3 Forced module unloading 强迫模块卸载 这里不选3.4 Module
14、 versioning support 模块版本,如果选中,则该模块可以支持多种版本的内核 这里不选3.5 Source checksum for all modules 源文件的校验和,可以不选 这里不选3.6 * Automatic kernel module loading 自动装载模块的功能 这里选上第四部分:Block layer -该菜单选项(Block layer)主要提供系统调度方式的选择4.1 - Enable the block layer 4.2 Support for tracing block io actions 支持追踪块I/O调度的动作 这里不选 4.3 IO
15、Schedulers - 选择I/O调度方式4.3.1 Anticipatory I/O scheduler 占先式调度方式 这里选上4.3.2 Deadline I/O scheduler 比Anticipatory更为小巧,在数据吞吐量非常大的数据库系统中表现得更有优势 这里不选(在后期实验后再定)4.3.3 CFQ I/O scheduler 桌面系统适用,采用平均分配策略的调度4.3.4 Default I/O scheduler (Anticipatory) - 选择默认的调度方式4.3.4.1 (X) Anticipatory 这里选上 4.3.4.2 ( ) No-op 这里不选
16、第五部分: System Type - 主要提供处理器型号及其特性的配置5.1 ARM system type (Atmel AT91) - 从中选择适合的处理器型号,如我们选择Samsung S3C2410。当然下面一系列选项都是仅针对S3C2410处理器而设计的。它们的配置文件在arch/arm/mach-s3c2410/Kconfig文件中5.1.5 (X) Atmel AT91 选择Atmel AT91系列,前面选项和后面选项都不选5.2 Atmel AT91 System-on-Chip - 选择Atmel AT91系列芯片5.2.1 Atmel AT91 Processor (AT
17、91SAM9260) -5.2.1.2 (X) AT91SAM9260 针对读卡器项目选择,其他选项都不选5.2.2 * Atmel AT91SAM9260-EK Evaluation Kit 这里选上5.2.3 Enable DataFlash Card support 这里不选5.2.4 Enable 16-bit data bus interface to NAND flash 这里不选5.2.5 * Programmable Clocks 这里选上5.3 * Support ARM926T processor 这里选上5.4 Support Thumb user binaries 如果
18、希望内核支持用户空间的thumb程序就选择该选项 这里不选5.5 Disable I-Cache (I-bit) 这里不选5.6 Disable D-Cache (C-bit) 用于开启或关闭I-Cache 这里不选5.7 Force write through D-cache 强制通过D-Cache写入 这里不选5.8 Round robin I and D cache replacement algorithm 这里不选第六部分:Bus support - 主要选择总线PCCARD接口支持,大多数嵌入式系统可以不选择。6.1 PCCARD (PCMCIA/CardBus) support
19、- 总线PCCARD接口支持 在读卡器项目中没用到此项功能,其子选项以后再进行相关说明 这里不选第七部分: Kernel Features - 主要选择内核特性。这里针对ARM平台,一般可以采用默认值。7.1 Preemptible Kernel (EXPERIMENTAL) 抢占式内核。这是2.6内核提供的新特性,建议使用 这里不选7.2 Dynamic tick timer 动态tick定时器 这里不选7.3 Use the ARM EABI to compile the kernel 使用ARM EABI编译内核 在读卡器项目中没用到此项功能,其后选项以后再进行相关说明 这里不选7.4
20、Memory model (Flat Memory) - 这里只有Flat Memory可以选择7.4.1 (X) Flat Memory 这里选上7.5 64 bit Memory and IO resources (EXPERIMENTAL) 这里不选7.6 Timer and CPU usage LEDs 在读卡器项目中没用到此项功能,其后选项以后再进行相关说明 这里不选第八部分:Boot options -主要选择内核启动选项,包括系统启动时传递的内核命令行参数8.1 (0x0) Compressed ROM boot loader base address zImage存放的基地址
21、8.2 (0x0) Compressed ROM boot loader BSS address BSS地址 8.3 (mem=64M console=ttyS0,115200 root=/dev/mtdblock0) Default kernel8.4 Kernel Execute-In-Place from ROM 从ROM中直接运行内核,该内核使用make xipImage编译 这里不选8.5 (0x00080000) XIP Kernel Physical Location (NEW) 选择XIP后,内核存放的物理地址 第九部分:Floating point emulation - 主
22、要提供和浮点相关选项 。因为Linux本身不支持浮点运算,所以即使系统中使用了支持浮点运算的协处理器,也必须从中选择一种算法实现浮点。9.1 - At least one emulation must be selected 9.2 * NWFPE math emulation 在内核中使用NWFPE浮点模拟 这里选上9.3 Support extended precision 支持扩展精度 这里不选9.4 FastFPE math emulation (EXPERIMENTAL) 在内核中使用FastFPE浮点模拟,它的速度比NWFPE快 这里不选9.5 VFP-format floatin
23、g point maths 这里不选第十部分: Userspace binary formats -提供在用户空间使用的二进制文件格式选择10.1 * Kernel support for ELF binaries 提供ELF格式支持,这个要选择 这里选上10.2 Kernel support for a.out and ECOFF binaries 提供a.out和ECOFF格式支持,被ELF取代 这里不选10.3 Kernel support for MISC binaries 提供其他一些格式支持,如果使用类似Linux下的DOS模拟器这类的软件,请选择该选项 这里不选10.4 RISC
24、 OS personality 这里不选第十一部分:Power management options - 电源管理选项11.1 Power Management support 提供电源管理支持 在读卡器项目中没用到此项功能,其后选项以后再进行相关说明 这里不选11.2 Advanced Power Management Emulation 高级电源管理的支持,笔记本中常用 这里不选第十二部分:Networking - 提供和网络相关的一些配置选择,内容比较多。12.1 * Networking support 网络支持 这里选上12.2 Networking options - 根据实际情况
25、选择需要的网络协议 12.2.1 Network packet debugging 网络数据包调试,可以不选 这里 不选12.2.2 Packet socket 数据包协议支持,如需要tcpdump等应用,需要选中该选项 这里选上12.2.3 Packet socket: mmapped IO 这里不选12.2.4 Unix domain sockets UNIX主机用来存取网络资源的标准支持,多数程序需要它 这里选上12.2.5 Transformation user configuration interface 支持使用本地软件进行IPsec用户配置接口配置 这里不选12.2.6 Tra
26、nsformation sub policy support (EXPERIMENTAL) 这里不选12.2.7 PF_KEY sockets PF_KEY套接字协议,如果使用IPsec就必须选择该选项。一般可以不使用该选项 这里选上12.2.8 * TCP/IP networking TCP/IP网络协议 这里选上12.2.9 IP: multicasting IP多播技术,选中 这里不选12.2.10 IP: advanced router IP高级路由 这里不选12.2.11 * IP: kernel level autoconfiguration 允许内核启动时利用BOOTP或者RAR
27、P来设置设备的IP和路由表,配置NFS时必须选择! 这里选上12.2.12 * IP: DHCP support DHCP协议 这里选上12.2.13 IP: BOOTP support BOOTP协议 这里不选 12.2.14 IP: RARP support RARP协议 这里不选12.2.15 IP: tunneling 隧道传输支持 这里不选12.2.16 IP: GRE tunnels over IP 使计算机能够压缩IPv4或IPv6的数据,并发送到另一协议中,不用选 这里不选12.2.17 IP: ARP daemon support (EXPERIMENTAL) 这里不选 建立
28、一块缓存以保存物理地址到IP地址的映射,不用选 这里不选12.2.18 IP: TCP syncookie support (disabled per default) 可避免网络上的SYN Flooding的DoS攻击 这里不选12.2.19 IP: AH transformation 提供对Ipsec AH的支持 这里不选12.2.20 IP: ESP transformation 提供对Ipsec ESP的支持 这里不选12.2.21 IP: IPComp transformation 提供对Ipsec IPComp的支持 这里不选12.2.22 IP: IPsec transport
29、mode 这里不选12.2.23 IP: IPsec BEET mode 这里不选12.2.24 INET: socket monitoring interface 提供对TCP套接字的支持 这里选上12.2.25 TCP: advanced congestion control - TCP高级阻塞控制 这里不选12.2.25.1 - TCP: advanced congestion control TCP阻塞控制,在上级菜单选中后进入下级菜单中还有BIC-TCP、H-TCP、TCP-Hybla和TCP Vegas等算法可供选择12.2.26 The IPv6 protocol IPv6协议支
30、持 在读卡器项目中没用到此项功能,其后选项以后再进行相关说明 这里不选12.2.27 Security Marking 这里不选12.2.28 Network packet filtering (replaces ipchains) - 网络数据包过滤,如果用做网关,必须选择 在读卡器项目中没用到此项功能,其子选项以后再进行相关说明 这里不选12.2.29 DCCP Configuration (EXPERIMENTAL) - 数据报拥塞控制协议,可不选 在读卡器项目中没用到此项功能,其子选项以后再进行相关说明 这里不选12.2.30 SCTP Configuration (EXPERIMEN
31、TAL) - 流控制传输协议,可不选 在读卡器项目中没用到此项功能,其子选项以后再进行相关说明 这里不选12.2.31 TIPC Configuration (EXPERIMENTAL) - 透明相互处理通信协议,可不选 在读卡器项目中没用到此项功能,其子选项以后再进行相关说明 这里不选12.2.32 Asynchronous Transfer Mode (ATM) (EXPERIMENTAL) 提供ATM(异步传输模式)支持,可不选在读卡器项目中没用到此项功能,其后选项以后再进行相关说明 这里不选12.2.33 802.1d Ethernet Bridging 802.1d以太网桥,一般应用
32、可以不选 这里不选12.2.33 802.1Q VLAN Support 802.1Q VLAN支持,如果用做防火墙等产品时需要选中该选项 这里不选12.2.34 DECnet Support DECnet支持,多用于现在的Compaq设备中,一般可不选 这里不选12.2.35 ANSI/IEEE 802.2 LLC type 2 Support IEEE 802.2 LLC2型协议(Logical Link Control),可不选 这里不选12.2.36 The IPX protocol IPX协议,Novell使用的通信协议,可不选在读卡器项目中没用到此项功能,其后选项以后再进行相关说明
33、 这里不选12.2.37 Appletalk protocol support 与苹果计算机数据进行存储时使用在读卡器项目中没用到此项功能,其后选项以后再进行相关说明 这里不选12.2.38 CCITT X.25 Packet Layer (EXPERIMENTAL) X.25 协议支持(CCITT国际电报电话咨询委员会) 这里不选12.2.39 LAPB Data Link Driver (EXPERIMENTAL) 对802.1d Ethernet Bridging的扩充 这里不选12.2.40 Acorn Econet/AUN protocols (EXPERIMENTAL) 早期的一种
34、网络协议,速度较慢,不用选在读卡器项目中没用到此项功能,其后选项以后再进行相关说明 这里不选12.2.41 WAN router 无线路由器 这里不选12.2.42 QoS and/or fair queueing - 当内核通过网络设备来传送包时,必须决定每个包的顺序。如果不选中,内核会采用标准的FIFO方式;如果选中,则采用下级菜单中的一种算法,例如CBQ、HTB、HFSC、ATM、PRIO、RED、SFQ、TEQL、TBF、GRED等 在读卡器项目中没用到此项功能,其子选项以后再进行相关说明 这里不选12.2.43 Network testing - 网络测试在读卡器项目中没用到此项功能
35、,其子选项以后再进行相关说明 这里不选12.3 Amateur Radio support - 业余无线电支持,一般不需要 这里不选12.4 IrDA (infrared) subsystem support - 红外子系统支持,如果系统中没有相关设备,不用选择 这里不选12.5 Bluetooth subsystem support - 蓝牙子系统支持,如果系统中没有相关设备,不用选择 这里不选12.6 Generic IEEE 802.11 Networking StackGeneric IEEE 802.11 Networking Stack 通用的IEEE 802.11网络协议栈支持
36、在读卡器项目中没用到此项功能,其子选项以后再进行相关说明 这里不选第十三部分:Device Drivers - 设备驱动13.1 Generic Driver Options - 通用驱动选项,默认值即可13.1.1 * Select only drivers that dont need compile-time external firmware 没有特别的固件需要支持,请选择该项 这里选上13.1.2 * Prevent firmware from being built 该选项能够防止重新构建固件,请选择 这里选上13.1.3 Userspace firmware loading su
37、pport 提供从用户空间加载固件的支持 这里不选13.2 Connector - unified userspace kernelspace linker -用户空间和内核空间连接器 在读卡器项目中没用到此项功能,其后选项以后再进行相关说明 这里不选13.3 Memory Technology Devices (MTD) - MTD设备支持,嵌入式系统使用。 在给内核MTD重新分区之前,有一点应该注意,2.6.16(含)以前内核与2.6.17(含)以后内核的MTD重新分区方法是不一样的,前者是需要增加新的分区信息,而后者源代码初始文件中已含分区信息,需要的是修改分区信息。13.3.1 Mem
38、ory Technology Device (MTD) support MTD支持 这里选上13.3.2 Debugging 调试功能(此选项选上后才有下一个选项) 这里不选13.3.3 MTD concatenating support 连接多个MTD设备,例如使用JFFS2文件系统管理多片Flash的情形。FS2410上只有1片Nand Flash,可以不选 这里不选13.3.4 * MTD partitioning support Flash分区支持,建议选中(在实践过程中,如果不选会导致系统无法完成正常的启动) 这里选上 13.3.5 RedBoot partition table p
39、arsing 使用RedBoot解析Flash分区表,如果需要读取这个分区表的信息,选中本项(此项选上后,才有后续3个选项) 这里不选13.3.6 * Command line partition table parsing 允许通过内核命令行传递MTD分区表信息 这里选上13.3.7 ARM Firmware Suite partition parsing 使用AFS分区信息 这里不选13.3.8 Direct char device access to MTD devices 该选项可以将系统中的MTD设备看做字符设备进行读/写 这里选上13.3.9 Caching block device access to MTD devices 文件系统挂载后,模拟块设备进行访问。常用于只读文件系统。如果是DiskOnChip请使用NFTL方式 这里选上13.3.10 FTL (Flash Translation Layer) support 提供Flash翻译层支持,可以不选 这里不选13.3.11 NFTL (NAND Flash Translation Layer) support NAND Flash翻译层支持,可以不选。上面两个选项用于PCMCIA较多,或者DiskOnChip