1. linux内核
1.1 定义
Linux内核本质上是一个复杂的程序。它是操作系统中最核心的部分,直接与计算机硬件交互并管理系统资源。尽管内核是一个程序,但它不同于一般的应用程序。它运行在系统的最高权限级别,直接控制硬件并为其他软件提供基础服务。Linux内核是开源的,意味着任何人都可以查看、修改和分发其源代码。
1. 2 作用
- 进程管理:创建、调度和终止进程。
- 内存管理:分配和回收内存,管理虚拟内存。
- 文件系统管理:提供文件系统的接口,管理文件的读写操作。
- 设备驱动:控制和管理硬件设备。
- 网络管理:处理网络通信和数据传输。
- 系统安全和权限管理:管理用户和进程的权限,确保系统安全。
2. NFS
2.1 定义
NFS(Network File System,网络文件系统)是一种分布式文件系统协议,最早由Sun Microsystems在1984年开发。它允许不同计算机系统之间通过网络共享文件,并使得客户端计算机能够像访问本地文件系统一样访问远程文件系统。
2.2 作用
-
文件共享:
- 跨平台共享:NFS允许不同操作系统(如Unix、Linux、Windows)之间共享文件,使得不同平台的用户可以访问相同的文件资源。
- 集中化管理:通过NFS,企业可以集中管理文件和数据,减少数据冗余,提升数据一致性。
-
简化数据访问:
- 透明访问:用户可以像访问本地文件一样访问NFS共享的文件,无需关心文件实际存储在哪台服务器上。
- 灵活性:NFS支持动态挂载和卸载文件系统,使得数据访问更加灵活和便捷。
-
资源利用优化:
- 存储整合:通过NFS,多个客户端可以共享同一个存储资源,提高存储利用率,减少存储浪费。
- 负载分担:NFS服务器可以分散多个客户端的访问请求,减轻单个服务器的负载压力,提高系统整体性能。
-
支持异构网络:
- 跨网络访问:NFS支持局域网(LAN)和广域网(WAN),用户可以在不同地理位置的网络环境下访问共享文件。
-
高可用性和容错性:
- 数据备份:NFS服务器可以配置数据备份策略,确保数据安全和高可用性。
- 容错机制:通过配置冗余服务器,NFS可以提供容错能力,当一个服务器发生故障时,客户端可以切换到备用服务器继续工作。
-
安全性:
- 访问控制:NFS支持基于用户和组的访问控制列表(ACL),可以精细化管理文件和目录的访问权限。
- 数据加密:在传输过程中可以通过加密协议(如Kerberos)保护数据安全,防止未经授权的访问和数据窃取。
3. Icache和Dcache
ICACHE(Instruction Cache)和DCACHE(Data Cache)是计算机体系结构中的两种缓存类型,它们分别用于存储指令和数据,旨在提高处理器访问存储器的效率。
-
ICACHE(指令缓存):
- 作用:ICACHE用于存储处理器执行的指令(代码段)。
- 优势:由于程序的执行通常会重复执行某些指令,将这些指令存储在ICACHE中可以减少处理器访问主存的频率,从而加快程序的执行速度。
- 结构:ICACHE通常由高速的SRAM(Static Random Access Memory)构成,它与处理器的速度相匹配,能够快速响应处理器的访问请求。
-
DCACHE(数据缓存):
- 作用:DCACHE用于存储处理器需要访问的数据。
- 优势:与ICACHE类似,DCACHE可以存储最常用的数据,减少处理器访问主存的时间,提高程序的执行效率。
- 结构:DCACHE也通常采用SRAM构建,速度较快,但其大小可能比ICACHE更大,因为数据通常比指令占用更多的内存空间。
在现代计算机系统中,ICACHE和DCACHE通常是处理器内部的一部分,它们通过缓存预取(cache prefetching)和替换策略(cache replacement policies)来优化缓存的命中率,以最大限度地提高系统的性能和响应速度。
4. TFTP
4.1 定义
TFTP(Trivial File Transfer Protocol)是一种简单的文件传输协议,主要用于在网络设备之间传输文件。
4.2 功能
通过TFTP将文件从服务器下载到客户端
5. makefile
5.1 普通文件
target = app
OBJS = main.o fun.o
%.c:%.o
gcc -c $^ -o $@
$(target):$(OBJS)
gcc -o$@ $^
clean:
rm $(target) $(OBJS)
5.2 产生驱动
KERNELDIR := /home/linux/s3c2440/linux-2.6.32.2/
CURRENT_PATH := $(shell pwd)
obj-m := first_driver.o
build: kernel_modules
kernel_modules:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
6.
8. 字符驱动程序(open、close、write、read)
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
int first_driver_open(struct inode *p_node, struct file *fp)
{
printk("open\n");
return 0;
}
ssize_t first_driver_read(struct file *fp, char __user *user_buffer, size_t n, loff_t * offset)
{
printk("read\n");
return 0;
}
ssize_t first_driver_write(struct file *fp, const char __user *user_buffer, size_t n, loff_t *offset)
{
printk("write\n");
return 0;
}
int first_driver_close(struct inode *p_node, struct file *fp)
{
printk("close\n");
return 0;
}
struct file_operations fops =
{
.owner = THIS_MODULE, //注册函数中的结构体变量
.release = first_driver_close,
.open = first_driver_open,
.read = first_driver_read,
.write = first_driver_write,
};
static int __init first_driver_init(void)//初始化
{
int ret;
printk("init\n");
ret = register_chrdev(200, "first driver", &fops);//注册
if(ret != 0)
{
return ret;
}
return 0;
}
static void __exit first_driver_exit(void)//销毁
{
unregister_chrdev(200, "first driver");//销毁
printk("exot\n");
}
module_init(first_driver_init);
module_exit(first_driver_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("PuTe");