- 论坛徽章:
- 0
|
2.6.25(2008年4月16日)
低层次的设备模型API有很多改变,是用来处理kobject和kset的。这些改变依次强制在整个源码树上的一个很大数量的调整。请看Documentation/kobject.txt,查看新的API的概述。
有一系列新的安全模块功能,处理文件系统挂载和卸载操作。
chained scatterlist API被增加,和sg_table补丁一起。
对块请求完成API有一些改变。请看http://lwn.net/Articles/266914/,了解新的做这一事情的方法。
很大数量的 SUNRPC 符号被改变到GPL形式的导出。
flatmem和discontigmem内存模型在64位x86体系上被移除;sparsemem被用在所有的建立上。
fastcall 函数在x86体系上没有做任何事情,所以它被移除了。
x86平台增加了一些函数,用来操作页面属性。他们是:
set_memory_uc(unsigned long addr, int numpages); /* Uncached */
set_memory_wb(unsigned long addr, int numpages); /* Cached */
set_memory_x(unsigned long addr, int numpages); /* Executable */
set_memory_nx(unsigned long addr, int numpages); /* Non-executable */
set_memory_ro(unsigned long addr, int numpages); /* Read-only */
set_memory_rw(unsigned long addr, int numpages); /* Read-write */
还有一些set_pages_* 函数使用 struct page 指针,而不是一个开始地址。
早期的启动调试,在x86平台上,通过FireWire端口,现在被支持了。
Bidirectional 命令支持被增加到SCSI层。
有一个新的进程状态称为TASK_KILLABLE。它是一个堵塞状态,类似于TASK_UNINTERRUPTIBLE,不同在于唤醒发生在有一个严重错误信号发生。这个想法是允许(基本上这样)不可中断的睡眠,但是仍然允许进程被直接杀掉-这样不可杀死的进程停留在“D”状态。有一些新的函数用来使用这一状态:wait_event_killable(),schedule_timeout_killable(), mutex_lock_killable(), 等
add_disk_randomness() 不再被导出,因为树中没有用户在用。
pci_enable_device_bars() 被用两个函数替换:pci_enable_device_io() 和 pci_enable_device_mem()。
高分辨率的计时器API被增大为:
unsigned long hrtimer_forward_now(struct hrtimer *timer,
ktime_t interval);
它将移动给定的计时器的呼气知道过了当前时间,由相关的时钟决定的。
device结构现在有一个指针指向一个device_dma_parameters 结构:
struct device_dma_parameters {
unsigned int max_segment_size;
unsigned long segment_boundary_mask;
};
这些层被DMA映射层(和IOMMU特别的映射代码)使用,来确定I/O操作被约束在设备上。PCI层支持这一特征用两个函数:
int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size);
int pci_set_dma_seg_boundary(struct pci_dev *dev, unsigned long mask);
设备驱动,使用不常用的严格的DMA限制应该使用这些函数来确定约束的使用。
许多nopage()方法没有用新的fault()API来替换;短期的计划是也移除nopage()。请看http://lwn.net/Articles/242625/,有关“页面不存在”的处理的新方法。
一个通用的资源计数机制以内存控制补丁的形式合并;请看<linux/res_counter.h>,查看更多的细节。
reserve_bootmem() 有一个新的标记参数。许多调用者将它设置为BOOTMEM_DEFAULT;kdump的代码,使用BOOTMEM_EXCLUSIVE 来确定它是唯一的访问内存的。
许多体系现在支持cmpxchg64() 和 cmpxchg_local()。
一系列新的字符串函数:
extern int strict_strtoul(const char *string, unsigned int base,
unsigned long *result);
extern int strict_strtol(const char *string, unsigned int base,
long *result);
extern int strict_strtoull(const char *string, unsigned int base,
unsigned long long *result);
extern int strict_strtoll(const char *string, unsigned int base,
long long *result);
这些函数转换给定的字符串为各种形式的long值,但他们将返回一个错误的状态,如果给定的string值不表示一个合适的整形值。这些函数现在用来分析内核参数。
2.6.24(2008年1月24日)
i386/x86_64 architecture merger在这里内核系列中存在。结果是一个单一的体系,叫做x86,可以用来为32位和64位的处理器编译。
Video4Linux 层有一些新的内部支持,针对一些复杂的设备调用,多于一个设备(许多V4L2设备包含,至少,分离的驱动为控制器和感应器)。
也是在Video4Linux中:video-buf 层被用一个更通用的实现替换,可以为更大范围的设备工作(包括USB设备和不支持scatter/gather DMA的)。
NAPI 接口,在网络驱动中使用的,重新工作(http://lwn.net/Articles/244640/),更好地支持有多条传输序列的设备。
网络层有一个新的函数打印MAC地址:
char *print_mac(char *buf, const u8 *addr);
buf应该用DECLARE_MAC_BUF()来声明;输出可以在printk用“%s”来格式化。
NETIF_F_LLTX (少锁的转换)标记,对网络设备的,已经不再使用,并应该在新的代码中不使用。
ktime_sub_us() 和 ktime_sub_ns() 被增加;他们减去给定的数量的微秒和纳秒,从一个ktime_t值中。
hard_header() 方法从struct net_device中移除;它用一个预协议的header_ops 结构指针替换。
debugfs 文件系统有一些新的函数(debugfs_create_x8(), debugfs_create_x16(), debugfs_create_x32()),让它更容易地导出文件包含的十六进制数字。
各种小的sysfs相关的API改变产生。name字段从kobject结构中移除。用户事件回调的原型被改变。许多子系统相关的调用被移除。子系统从来不真正做什么事情,get_bus() 和 put_bus()不再存在。
一个新的值DMA_MASK_NONE能被存储在device结构的dma_mask 字段来指示设备不能做DMA。
VFS 有一系列新的地址空间操作(write_begin() 和 write_end())。目标在于修改一些死锁场景;请看http://lwn.net/Articles/254856/。
scatterlist chaining 补丁被合并,许多内核的地方被更新,使用这一特征。
CFLAGS= 和 CPPFLAGS= 选项现在和内核编译系统一起工作,以理想的状态。标记被分别传递给C编译器和预处理器。
slab构建回调函数的原型改为:
void (*ctor)(struct kmem_cache *cache, void *object);
不用的flags参数被移除,其他两个参数的顺序被保留以适应其他的slab函数。
DECLARE_MUTEX_LOCKED() 宏被移除。
SA_* 系列长的不用的宏被移除,更青睐于用IRQF_* 这等价形式。
一些块层实体原型被改变。最明显的改变,可能是,bio_endio()和相关的bio_end_io_t:
void bio_endio(struct bio *bio, int error);
typedef void (bio_end_io_t) (struct bio *, int);
这些函数并不总是完成整个的BIO,所以size参数被移除。
paravirt_ops 结构被拆分为更小的,更特别的操作向量。这包含pv_init_ops (启动时间操作),pv_time_ops (时间相关操作),pv_cpu_ops (特权指令),pv_irq_ops (中断处理),pv_mmu_ops (页表管理)和一些其他的。
这是一些新增加的位操作:
int test_and_set_bit_lock(unsigned long nr, unsigned long *addr);
void clear_bit_unlock(unsigned long nr, unsigned long *addr);
void __clear_bit_unlock(unsigned long nr, unsigned long *addr);
这些操作致力于创建单一位的锁定;他们工作不需要任何附加内存屏障。
有一个新的KERN_CONT 优先级为printk。它事实上是空的;它意味着是printk调用的一个标记,继续前一个(不用新行符结束)打印行。
文件系统的导出操作,使文件系统在一些协议如NFS上是可用的,被重写。两个新的方法(fh_to_dentry() and fh_to_parent())替换了旧的get_dentry() 接口。这是一个新的结构(struct fid),用来描述文件句柄。这一工作目标在于使导出接口更早可用,并(最终)支持64位inode节点号。
virtio补丁,提供了一个基础,给I/O的进入和虚拟客户的退出-被合并。 |
|