第 12 章 该做什么和不该做什么
12.1. 介绍
这里是一些在移植软件时可能会遇到的常见问题。 您应按照这个列表检查自己的 port, 同样地, 您也可以帮助检查 PR 数据库 中由其它人提交的 port。 请按照在 问题报告和一般性注释 中介绍的方法提交您的看法。 帮助检查 PR 数据库中的 ports 即能够帮助我们更快地 commit 它们, 也能证明您清楚地了解如何完成这些工作。
12.2. WRKDIR
(联编时使用的临时目录)
任何时候都不要在 WRKDIR
以外的位置写文件。 WRKDIR
是在 port 联编过程中唯一的一处一定可写的地方 (参见如何从 CDROM 安装 port 以了解从只读的目录中联编和安装 port 的例子)。 如果您需要改变 pkg-*
文件, 请按照 重新定义某个变量 介绍的方法, 而不是覆盖它们来实现。
12.3. WRKDIRPREFIX
(用于联编的临时目录的父目录名)
一定要确保您的 port 尊重 WRKDIRPREFIX
的设置。 绝大多数 port 并不需要担心这个。 具体说来, 当引用其它 port 的 WRKDIR
时, 需要注意正确的位置应该是 WRKDIRPREFIXPORTSDIR/subdir/name/work
而不是 PORTSDIR/subdir/name/work
或 .CURDIR/../../subdir/name/work
, 或别的什么。
另外, 如果您自行定义了 WRKDIR
, 也要把 ${WRKDIRPREFIX}${.CURDIR}
放到前面。
12.4. 区分不同的操作系统, 以及 OS 的版本
在不同版本的 Unix 下可能需要对代码进行一些修改或增加少许编译选项, 才能够正确地编译和运行。 如果您需要根据一些条件来对代码进行修改, 请尽可能让这些修改通用, 这样, 我们就能够将这些代码移植回更早的 FreeBSD 系统, 并交叉移植到其它 BSD 系统, 例如来自 CSRG 的 4.4BSD, BSD/386, 386BSD, NetBSD 和 OpenBSD。
推荐的获得 4.3BSD/Reno (1990) 以及更新版本 BSD 代码版本号的方式, 是使用 sys/param.h 中所定义的 BSD
宏的值。 一般来说这个文件已经被引用了; 如果没有的话, 增加下述代码:
#if (defined(__unix__) || defined(unix)) && !defined(USG) #include <sys/param.h> #endif
到 .c
文件中合适的地方。 我们相信所有定义了这两个符号的系统中, 都提供了 sys/param.h
。 如果您发现有不这样做的系统, 请通过致信 FreeBSD ports 邮件列表 让我们了解这一情况。
另一种方法是使用 GNU Autoconf 风格的方式:
#ifdef HAVE_SYS_PARAM_H #include <sys/param.h> #endif
采用这种方法时, 不要忘了把 -DHAVE_SYS_PARAM_H
加到 Makefile
中的 CFLAGS
里。
一旦引用了 sys/param.h
, 您就可以使用:
#if (defined(BSD) && (BSD >= 199103))
来检测代码是否正在 4.3 Net2 代码基础, 或更新的系统上编译 (例如 FreeBSD 1.x, 4.3/Reno, NetBSD 0.9, 386BSD, BSD/386 1.1 以及更高版本)。
使用:
#if (defined(BSD) && (BSD >= 199306))
来检测代码是否正在 4.4 或更新的系统 (例如 FreeBSD 2.x, 4.4, NetBSD 1.0、 BSD/386 2.0 或更高版本)。
对于 4.4BSD-Lite2 代码系来说, BSD
宏的值应该是 199506
。 这里只是作为信息提供, 您不应使用它来区分基于 4.4-Lite 的 FreeBSD 和基于 4.4-Lite2 的版本。 这些情况下, 您应使用 __FreeBSD__
宏。
保守地使用:
__FreeBSD__
在所有版本的 FreeBSD 中皆有定义。 如果您正进行的修改 只 影响 FreeBSD, 则应使用这个宏。 类似sys_errlist[]
之于strerror()
这样的移植问题是伯克利代码系公用的, 而并非 FreeBSD 所专有。在 FreeBSD 2.x 中,
__FreeBSD__
定义为2
。 更早版本中, 它曾经是1
。 新的版本都会在主要的版本号变化时变更它。如果您需要区分 FreeBSD 1.x 系统和 FreeBSD 2.x 及更高版本的区别, 通常应使用前述的
BSD
宏来进行。 如果事实上需要一个 FreeBSD 专有的修改 (例如, 在使用ld
时需要特殊的共享库选项), 则可以用__FreeBSD__
和#if __FreeBSD__ > 1
来检测 FreeBSD 2.x 和新系统上的变化。 如果需要更细粒度地检测 FreeBSD 2.0-RELEASE 之后版本的变化, 则可以使用:#if __FreeBSD__ >= 2 #include <osreldate.h> # if __FreeBSD_version >= 199504 /* 适用于 2.0.5+ 版本的代码 */ # endif #endif
在已有的数百个 port 中, 只有一两个应该使用 __FreeBSD__
。 早期的 port 在不适当的地方使用了它并引发问题, 并不意味着您也必定如此。
12.5. __FreeBSD_version 值
下面是在 sys/param.h __FreeBSD_version
中定义的值及其意义的列表, 这里给出以方便您查阅:
值 | 日期 | 版本 |
---|---|---|
119411 | 2.0-RELEASE | |
199501, 199503 | March 19, 1995 | 2.1-CURRENT |
199504 | April 9, 1995 | 2.0.5-RELEASE |
199508 | August 26, 1995 | 2.1 之前的 2.2-CURRENT |
199511 | November 10, 1995 | 2.1.0-RELEASE |
199512 | November 10, 1995 | 2.1.5 之前的 2.2-CURRENT |
199607 | July 10, 1996 | 2.1.5-RELEASE |
199608 | July 12, 1996 | 2.1.6 之前的 2.2-CURRENT |
199612 | November 15, 1996 | 2.1.6-RELEASE |
199612 | 2.1.7-RELEASE | |
220000 | February 19, 1997 | 2.2-RELEASE |
(not changed) | 2.2.1-RELEASE | |
(无变化) | 在 2.2.1-RELEASE 之后的 2.2-STABLE | |
221001 | April 15, 1997 | texinfo-3.9 之后的 2.2-STABLE |
221002 | April 30, 1997 | top 之后的 2.2-STABLE |
222000 | May 16, 1997 | 2.2.2-RELEASE |
222001 | May 19, 1997 | 2.2.2-RELEASE 之后的 2.2-STABLE |
225000 | October 2, 1997 | 2.2.5-RELEASE |
225001 | November 20, 1997 | 2.2.5-RELEASE 之后的 2.2-STABLE |
225002 | December 27, 1997 | 合并 ldconfig -R 之后的 2.2-STABLE |
226000 | March 24, 1998 | 2.2.6-RELEASE |
227000 | July 21, 1998 | 2.2.7-RELEASE |
227001 | July 21, 1998 | 2.2.7-RELEASE 之后的 2.2-STABLE |
227002 | September 19, 1998 | semctl(2) 修改之后的 2.2-STABLE |
228000 | November 29, 1998 | 2.2.8-RELEASE |
228001 | November 29, 1998 | 2.2.8-RELEASE 之后的 2.2-STABLE |
300000 | February 19, 1996 | mount(2) 修改之前的 3.0-CURRENT |
300001 | September 24, 1997 | mount(2) 修改之后的 3.0-CURRENT |
300002 | June 2, 1998 | semctl(2) 修改之后的 3.0-CURRENT |
300003 | June 7, 1998 | ioctl 参数变化之后的 3.0-CURRENT |
300004 | September 3, 1998 | ELF 变换之后的 3.0-CURRENT |
300005 | October 16, 1998 | 3.0-RELEASE |
300006 | October 16, 1998 | 3.0-RELEASE 之后的 3.0-CURRENT |
300007 | January 22, 1999 | 3/4切分之后的 3.0-STABLE |
310000 | February 9, 1999 | 3.1-RELEASE |
310001 | March 27, 1999 | 3.1-RELEASE 之后的 3.1-STABLE |
310002 | April 14, 1999 | C++ 构建/析构函数顺序变化之后的 3.1-STABLE |
320000 | 3.2-RELEASE | |
320001 | May 8, 1999 | 3.2-STABLE |
320002 | August 29, 1999 | 二进制不兼容的 IPFW 和 socket 变化之后的 3.2-STABLE |
330000 | September 2, 1999 | 3.3-RELEASE |
330001 | September 16, 1999 | 3.3-STABLE |
330002 | November 24, 1999 | libc 中加入 mkstemp(3) 之后的 3.3-STABLE |
340000 | December 5, 1999 | 3.4-RELEASE |
340001 | December 17, 1999 | 3.4-STABLE |
350000 | June 20, 2000 | 3.5-RELEASE |
350001 | July 12, 2000 | 3.5-STABLE |
400000 | January 22, 1999 | 3/4切分之后的 4.0-CURRENT |
400001 | February 20, 1999 | 修改动态连接器处理方式之后的 4.0-CURRENT |
400002 | March 13, 1999 | C++ 构建/析构函数顺序变化之后的 |
400003 | March 27, 1999 | 提供 dladdr(3) 之后的 4.0-CURRENT |
400004 | April 5, 1999 | 修正了 __deregister_frame_info 的 4.0-CURRENT (也表示在 EGCS 1.1.2 集成之后的 4.0-CURRENT) |
400005 | April 27, 1999 | suser(9) API 变化之后的 4.0-CURRENT (也表示 newbus 之后的 4.0-CURRENT) |
400006 | May 31, 1999 | cdevsw 注册机制改变之后的 4.0-CURRENT |
400007 | June 17, 1999 | 加入了 socket 级凭据的 so_cred 之后的 4.0-CURRENT |
400008 | June 20, 1999 | 在 libc_r 中加入 poll 系统调用接口之后的 4.0-CURRENT |
400009 | July 20, 1999 | 将内核中 dev_t 类型改为 struct specinfo 指针之后的 4.0-CURRENT |
400010 | September 25, 1999 | 修正了一处 jail(2) 漏洞之后的 4.0-CURRENT |
400011 | September 29, 1999 | sigset_t 数据类型改变之后的 4.0-CURRENT |
400012 | November 15, 1999 | 切换到 GCC 2.95.2 编译器之后的 4.0-CURRENT |
400013 | December 4, 1999 | 加入了可插的 linux模式 ioctl 处理程序后的 4.0-CURRENT |
400014 | January 18, 2000 | 引入 OpenSSL 之后的 4.0-CURRENT |
400015 | January 27, 2000 | GCC 2.95.2 中 ABI 默认值从 -fvtable-thunks 改为 -fno-vtable-thunks 之后的 4.0-CURRENT |
400016 | February 27, 2000 | 引入 OpenSSH 之后的 4.0-CURRENT |
400017 | March 13, 2000 | 4.0-RELEASE |
400018 | March 17, 2000 | 4.0-RELEASE 之后的 4.0-STABLE |
400019 | May 5, 2000 | 引入延迟校验和之后的 4.0-STABLE |
400020 | June 4, 2000 | 将 libxpg4 的代码并入 libc 之后的 4.0-STABLE |
400021 | July 8, 2000 | Binutils 升级到 2.10.0 之后的 4.0-STABLE, ELF 标志变化, 以及将 tcsh 引入基本系统 |
410000 | July 14, 2000 | 4.1-RELEASE |
410001 | July 29, 2000 | 4.1-RELEASE 之后的 4.1-STABLE |
410002 | September 16, 2000 | setproctitle(3) 从 libutil 移入 libc 之后的 4.1-STABLE |
411000 | September 25, 2000 | 4.1.1-RELEASE |
411001 | 4.1.1-RELEASE 之后的 4.1.1-STABLE | |
420000 | October 31, 2000 | 4.2-RELEASE |
420001 | January 10, 2001 | 合并 libgcc.a 和 libgcc_r.a, 并修改了相关的 GCC 连接方式之后的 4.2-STABLE |
430000 | March 6, 2001 | 4.3-RELEASE |
430001 | May 18, 2001 | 引入 wint_t 之后的 4.3-STABLE |
430002 | July 22, 2001 | PCI 电源状态 API 合并之后的 4.3-STABLE |
440000 | August 1, 2001 | 4.4-RELEASE |
440001 | October 23, 2001 | 引入 d_thread_t 之后的 4.4-STABLE |
440002 | November 4, 2001 | mount 结构改变之后的 4.4-STABLE (影响文件系统 kld) |
440003 | December 18, 2001 | 用户态部分的 smbfs 被引入之后的 4.4-STABLE |
450000 | December 20, 2001 | 4.5-RELEASE |
450001 | February 24, 2002 | usb 结构元素改名之后的 4.5-STABLE |
450004 | April 16, 2002 | 在 rc.conf(5) 变量 sendmail_enable 默认值改为 NONE 之后的 4.5-STABLE |
450005 | April 27, 2002 | 默认将 XFree86 4 用于预编译包联编之后的 4.5-STABLE |
450006 | May 1, 2002 | accept 过滤器修正了安全问题并且不再会轻易被 DoS 之后的 4.5-STABLE |
460000 | June 21, 2002 | 4.6-RELEASE |
460001 | June 21, 2002 | 修正了 sendfile(2) 以吻合文档, 而不再根据发出的头计算发出数据量之后的 4.6-STABLE |
460002 | July 19, 2002 | 4.6.2-RELEASE |
460100 | June 26, 2002 | 4.6-STABLE |
460101 | June 26, 2002 | MFC `sed -i' 之后的 4.6-STABLE |
460102 | September 1, 2002 | MFC 许多 pkg_install 新特性之后的 4.6-STABLE |
470000 | October 8, 2002 | 4.7-RELEASE |
470100 | October 9, 2002 | 4.7-STABLE |
470101 | November 10, 2002 | 开始生成 __std{in,out,err}p 引用, 而不是 __sF。 这将 std{in,out,err} 从编译时表达式变成了运行时值。 |
470102 | January 23, 2003 | MFC mbuf 相关的将 m_aux mbuf 改为 m_tag 的修改之后的 4.7-STABLE |
470103 | February 14, 2003 | OpenSSL 升级到 0.9.7 之后的 4.7-STABLE |
480000 | March 30, 2003 | 4.8-RELEASE |
480100 | April 5, 2003 | 4.8-STABLE |
480101 | May 22, 2003 | realpath(3) 变为线程安全的之后的 4.8-STABLE |
480102 | August 10, 2003 | 对 twe 的 3ware API 修改之后的 4.8-STABLE |
490000 | October 27, 2003 | 4.9-RELEASE |
490100 | October 27, 2003 | 4.9-STABLE |
490101 | January 8, 2004 | kinfo_eproc 中加入 e_sid 之后的 4.9-STABLE |
490102 | February 4, 2004 | MFC rtld 的 libmap 功能之后的 4.9-STABLE |
491000 | May 25, 2004 | 4.10-RELEASE |
491100 | June 1, 2004 | 4.10-STABLE |
491101 | August 11, 2004 | MFC 20040629 版本的包维护工具之后的 4.10-STABLE |
491102 | November 16, 2004 | 修正了 VM 当解除 wire 不存在页面时的问题之后的 4.10-STABLE |
492000 | December 17, 2004 | 4.11-RELEASE |
492100 | December 17, 2004 | 4.11-STABLE |
492101 | April 18, 2006 | 将 libdata/ldconfig 目录加入 mtree 文件之后的 4.11-STABLE。 |
500000 | March 13, 2000 | 5.0-CURRENT |
500001 | April 18, 2000 | 加入 ELF 头字段, 并改变我们的 ELF 执行文件标记方式之后的 5.0-CURRENT |
500002 | May 2, 2000 | kld 元数据修改之后的 5.0-CURRENT |
500003 | May 18, 2000 | buf/bio 修改之后的 5.0-CURRENT |
500004 | May 26, 2000 | binutils 升级后的 5.0-CURRENT |
500005 | June 3, 2000 | 将 libxpg4 并入 libc, 以及引入 TASKQ 之后的 5.0-CURRENT |
500006 | June 10, 2000 | 加入 AGP 接口之后的 5.0-CURRENT |
500007 | June 29, 2000 | Perl 升级到 5.6.0 之后的 5.0-CURRENT |
500008 | July 7, 2000 | KAME 代码升级到 2000/07 之后的 5.0-CURRENT |
500009 | July 14, 2000 | ether_ifattach() 和 ether_detach() 修改之后的 5.0-CURRENT |
500010 | July 16, 2000 | 将 mtree 改为原先的默认值, 并使用 -L 来跟随符号连接之后的 5.0-CURRENT |
500011 | July 18, 2000 | kqueue API 修改之后的 5.0-CURRENT |
500012 | September 2, 2000 | setproctitle(3) 从 libutil 挪到 libc 之后的 5.0-CURRENT |
500013 | September 10, 2000 | 首个 SMPng commit 之后的 5.0-CURRENT |
500014 | January 4, 2001 | <sys/select.h> 改为 <sys/selinfo.h> 之后的 5.0-CURRENT |
500015 | January 10, 2001 | libgcc.a 和 libgcc_r.a 以及 GCC 连接方式变动之后的 5.0-CURRENT |
500016 | January 24, 2001 | 修改以允许 libc 和 libc_r 连接到一起, 不再鼓励使用 -pthread 之后的 5.0-CURRENT |
500017 | February 18, 2001 | 从 struct ucred 切换到 struct xucred 以便使内核为 mountd 等程序导出的 API 稳定下来之后的 5.0-CURRENT |
500018 | February 24, 2001 | 加入 CPUTYPE 用于 CPU 专用的优化的 make 变量之后的 5.0-CURRENT |
500019 | June 9, 2001 | machine/ioctl_fd.h 改为 sys/fdcio.h 之后的 5.0-CURRENT |
500020 | June 15, 2001 | locale 名称改变之后的 5.0-CURRENT |
500021 | June 22, 2001 | 引入 bzip2 之后的 5.0-CURRENT, 同时也代表删去了 S/Key |
500022 | July 12, 2001 | 加入 SSE 支持之后的 5.0-CURRENT |
500023 | September 14, 2001 | KSE 第2个里程碑之后的 5.0-CURRENT |
500024 | October 1, 2001 | d_thread_t 之后的 5.0-CURRENT, 同时 UUCP 被移入 ports |
500025 | October 4, 2001 | 64-位平台上的描述符和 creds API 变化之后的 5.0-CURRENT |
500026 | October 9, 2001 | 采用 XFree86 4 作为默认的预编译包, 以及加入 strnstr() libc 函数之后的 5.0-CURRENT |
500027 | October 10, 2001 | 加入 strcasestr() libc 函数之后的 5.0-CURRENT |
500028 | December 14, 2001 | 引入了用户态的 smbfs 组件之后的 5.0-CURRENT |
(未予增加) | 加入了新的 C99 指定位宽整形变量之后的 5.0-CURRENT | |
500029 | January 29, 2002 | 修改了 sendfile(2) 的返回值之后的 5.0-CURRENT |
500030 | February 15, 2002 | 引入适合表达文件标志的 fflags_t 类型之后的 5.0- |
500031 | February 24, 2002 | usb 结构元素改名之后的 5.0-CURRENT |
500032 | March 16, 2002 | 引入 Perl 5.6.1 之后的 5.0-CURRENT |
500033 | April 3, 2002 | rc.conf(5) 变量 sendmail_enable 默认值改为 NONE 之后的 5.0-CURRENT |
500034 | April 30, 2002 | mtx_init() 增加了第三个参数之后的 5.0-CURRENT |
500035 | May 13, 2002 | 包含 Gcc 3.1 的 5.0-CURRENT |
500036 | May 17, 2002 | 在 /usr/src 中删去了 Perl 的 5.0-CURRENT |
500037 | May 29, 2002 | 加入 dlfunc(3) 之后的 5.0-CURRENT |
500038 | July 24, 2002 | 一些 struct sockbuf 的成员变为结构, 并重新排列顺序之后的 5.0-CURRENT |
500039 | September 1, 2002 | 引入 GCC 3.2.1 之后的 5.0-CURRENT。 头文件也不再使用 _BSD_FOO_T_ 而开始使用 _FOO_T_DECLARED。 这个值还可以用于作为一个包含使用 bzip2(1) 的预编译包支持的预期点。 |
500040 | September 20, 2002 | 以去掉对 disklabel 结构内容的依赖的名义, 对磁盘相关的函数进行了许多修改之后的 5.0-CURRENT |
500041 | October 1, 2002 | libc 中加入 getopt_long(3) 之后的 5.0-CURRENT |
500042 | October 15, 2002 | Binutils 2.13 升级, 包含了新的 FreeBSD 模拟, vec 以及输出格式之后的 5.0-CURRENT |
500043 | November 1, 2002 | libc 中加入了弱 pthread_XXX 符号之后的 5.0-CURRENT, 从而淘汰了 libXThrStub.so。 5.0-RELEASE。 |
500100 | January 17, 2003 | 创建 RELENG_5_0 分支之后的 5.0-CURRENT |
500101 | February 19, 2003 | <sys/dkstat.h> 变成了一个空文件, 不应再被引用 |
500102 | February 25, 2003 | 修改 d_mmap_t 接口之后的 5.0-CURRENT |
500103 | February 26, 2003 | taskqueue_swi 以无全局锁的方式运行之后的 5.0-CURRENT, 同时还加入了使用全局锁的 taskqueue_swi_giant |
500104 | February 27, 2003 | 去掉了 cdevsw_add() 和 cdevsw_remove() 出现 MAJOR_AUTO 分配机制 |
500105 | March 4, 2003 | 采用新的 cdevsw 初始化方法之后的 5.0-CURRENT |
500106 | March 8, 2003 | devstat_add_entry() 被 devstat_new_entry() 取代 |
500107 | March 15, 2003 | 修改 devstat 接口; 请参见 sys/sys/param.h 1.149 |
500108 | March 15, 2003 | 改变了 Token-Ring 接口 |
500109 | March 25, 2003 | 加入 vm_paddr_t |
500110 | March 28, 2003 | 将 realpath(3) 改为线程安全之后的 5.0-CURRENT |
500111 | April 9, 2003 | usbhid(3) 与 NetBSD 同步之后的 5.0-CURRENT |
500112 | April 17, 2003 | 加入新的 NSS 实现, 以及 POSIX.1 getpw*_r, getgr*_r 函数之后的 5.0-CURRENT |
500113 | May 2, 2003 | 删去旧式 rc 系统之后的 5.0-CURRENT |
501000 | June 4, 2003 | 5.1-RELEASE. |
501100 | June 2, 2003 | 创建 RELENG_5_1 分支之后的 5.1-CURRENT |
501101 | June 29, 2003 | 改正 sigtimedwait(2) 和 sigwaitinfo(2) 语义之后的 5.1-CURRENT |
501102 | July 3, 2003 | 在 bus_dma_tag_create(9) 中加入了 lockfunc 和 lockfuncarg 字段之后的 5.1-CURRENT |
501103 | July 31, 2003 | 集成了 GCC 3.3.1-pre 20030711 之后的 5.1-CURRENT |
501104 | August 5, 2003 | twe 中 3ware API 变化之后的 5.1-CURRENT |
501105 | August 17, 2003 | 允许动态连接 /bin 和 /sbin, 以及将某些库移动到 /lib 之后的 5.1-CURRENT |
501106 | September 8, 2003 | 增加内核级 Coda 6.x 支持之后的 5.1-CURRENT |
501107 | September 17, 2003 | 将 16550 UART 常量从 <dev/sio/sioreg.h> 挪到 <dev/ic/ns16550.h> 之后的 5.1-CURRENT。 此外, rtld 也从此无条件支持 libmap 功能 |
501108 | September 23, 2003 | 更新 PFIL_HOOKS API 之后的 5.1-CURRENT |
501109 | September 27, 2003 | 增加 kiconv(3) 之后的 5.1-CURRENT |
501110 | September 28, 2003 | 默认的 cdevsw open 和 close 操作变化之后的 5.1-CURRENT |
501111 | October 16, 2003 | cdevsw 的布局变化之后的 5.1-CURRENT |
501112 | October 16, 2003 | 增加 kobj 多继承之后的 5.1-CURRENT |
501113 | October 31, 2003 | 修改 struct ifnet 中的 if_xname 之后的 5.1-CURRENT |
501114 | November 16, 2003 | 将 /bin 和 /sbin 改为动态连接之后的 5.1-CURRENT |
502000 | December 7, 2003 | 5.2-RELEASE |
502010 | February 23, 2004 | 5.2.1-RELEASE |
502100 | December 7, 2003 | 创建 RELENG_5_2 分支之后的 5.2-CURRENT |
502101 | December 19, 2003 | libc 中加入了 __cxa_atexit/__cxa_finalize 两个函数之后的 5.2-CURRENT |
502102 | January 30, 2004 | 默认线程库从 libc_r 改为 libpthread 之后的 5.2-CURRENT |
502103 | February 21, 2004 | 设备驱动 API 大规模翻修之后的 5.2-CURRENT |
502104 | February 25, 2004 | 增加 getopt_long_only() 之后的 5.2-CURRENT |
502105 | March 5, 2004 | C 的 NULL 定义改为 ((void *)0) 之后的 5.2-CURRENT, 这会产生更多的编译警告 |
502106 | March 8, 2004 | pf 连入联编和安装过程之后的 5.2-CURRENT |
502107 | March 10, 2004 | 在 sparc64 上将 time_t 改为 64-位 值之后的 5.2-CURRENT |
502108 | March 12, 2004 | 在一些头文件修改以支持 Intel C/C++ 编译器, 以及让 execve(2) 更严格地符合 POSIX 之后的 5.2-CURRENT |
502109 | March 22, 2004 | 引入 bus_alloc_resource_any API 之后的 5.2-CURRENT |
502110 | March 27, 2004 | 加入 UTF-8 locale 之后的 5.2-CURRENT |
502111 | April 11, 2004 | 删去 getvfsent(3) API 之后的 5.2-CURRENT |
502112 | April 13, 2004 | 为 make(1) 增加 .warning 语句之后的 5.2-CURRENT |
502113 | June 4, 2004 | 所有串口设备都强制使用 ttyioctl() 之后的 5.2-CURRENT |
502114 | June 13, 2004 | 引入 ALTQ 框架之后的 5.2-CURRENT |
502115 | June 14, 2004 | 修改 sema_timedwait(9) 使其成功时返回 0, 失败时返回非 0 的错误代码之后的 5.2-CURRENT |
502116 | June 16, 2004 | 将内核 dev_t 改为指向 struct cdev * 的指针之后的 5.2-CURRENT |
502117 | June 17, 2004 | 将内核 udev_t 改为 dev_t 之后的 5.2-CURRENT |
502118 | June 17, 2004 | 为 clock_gettime(2) 和 clock_getres(2) 增加 CLOCK_VIRTUAL 和 CLOCK_PROF 支持之后的 5.2-CURRENT |
502119 | June 22, 2004 | 对网络接口复制进行全面修改之后的 5.2-CURRENT |
502120 | July 2, 2004 | package 工具升级为 20040629 之后的 5.2-CURRENT |
502121 | July 9, 2004 | 不再将蓝牙代码标记为 i386 专用之后的 5.2-CURRENT |
502122 | July 11, 2004 | 引入 KDB 调试器框架之后的 5.2-CURRENT。 同时还引入了 DDB 作为后台, 以及 GDB 后台。 |
502123 | July 12, 2004 | 修改 VFS_ROOT 和 vflush 使其使用一个 struct thread 参数之后的 5.2-CURRENT。 struct kinfo_proc 增加了一个用户数据指针。 同时, 默认的 X 实现切换为 xorg |
502124 | July 24, 2004 | 将使用 rc.d 和传统脚本的 port 分别启动之后的 5.2-CURRENT |
502125 | July 28, 2004 | 取消前一修改之后的 5.2-CURRENT |
502126 | July 31, 2004 | 删除 kmem_alloc_pageable() 并引入 gcc 3.4.2 的 5.2-CURRENT |
502127 | August 2, 2004 | 修改 UMA 内核 API 允许构建函数和初始化失败之后的 5.2-CURRENT |
502128 | August 8, 2004 | vfs_mount 签名和全局替换 suser(9) API 的 PRISON_ROOT 为 SUSER_ALLOWJAIL 之后的 5.2-CURRENT |
503000 | August 23, 2004 | pfil API 修改之前的 5.3-BETA/RC |
503001 | September 22, 2004 | 5.3-RELEASE |
503100 | October 16, 2004 | 创建 RELENG_5_3 分支之后的 5.3-STABLE |
503101 | December 3, 2004 | 加入了 glibc 风格的 strftime(3) 填充选项的 5.3-STABLE |
503102 | February 13, 2005 | MFC OpenBSD 的 nc(1) 之后的 5.3-STABLE |
503103 | February 27, 2005 | 在 MFC 了 <src/include/stdbool.h> 和 <src/sys/i386/include/_types.h> 用于兼容 GCC 和 Intel C/C++ 编译器的修正之后的 5.4-PRERELEASE |
503104 | February 28, 2005 | MFC 了将 ifi_epoch 由 wall 时钟时间改为 uptime 之后的 5.4-PRERELEASE |
503105 | March 2, 2005 | MFC 了 vswprintf(3) 中的 EOVERFLOW 检查的 5.4-PRERELEASE |
504000 | April 3, 2005 | 5.4-RELEASE. |
504100 | April 3, 2005 | 创建 RELENG_5_4 分支之后的 5.4-STABLE |
504101 | May 11, 2005 | 加大默认线程堆栈尺寸之后的 5.4-STABLE |
504102 | June 24, 2005 | 加入 sha256 之后的 5.4-STABLE |
504103 | October 3, 2005 | MFC if_bridge 之后的 5.4-STABLE |
504104 | November 13, 2005 | bsdiff 和 portsnap MFC 之后的 5.4-STABLE |
504105 | January 17, 2006 | 在 MFC 了 ldconfig_local_dirs 修改之后的 5.4-STABLE。 |
505000 | May 12, 2006 | 5.5-RELEASE. |
505100 | May 12, 2006 | 在创建 RELENG_5_5 分支之后的 5.5-STABLE |
600000 | August 18, 2004 | 6.0-CURRENT |
600001 | August 27, 2004 | 内核中永久性启用 PFIL_HOOKS 之后的 6.0-CURRENT |
600002 | August 30, 2004 | 最初将 ifi_epoch 加入 if_data 结构之后的 6.0-CURRENT。 此后不久即被撤销。 请不要使用这个值。 |
600003 | September 8, 2004 | if_data 中再次加入 ifi_epoch 成员之后的 6.0-CURRENT |
600004 | September 29, 2004 | 将 struct inpcb 参数加入 pfil API 之后的 6.0-CURRENT |
600005 | October 5, 2004 | newsyslog 加入了 "-d DESTDIR" 参数之后的 6.0-CURRENT |
600006 | November 4, 2004 | 加入了 glibc 风格的 strftime(3) 填充选项之后的 6.0-CURRENT |
600007 | December 12, 2004 | 加入了 802.11 框架更新之后的 6.0-CURRENT |
600008 | January 25, 2005 | 修改 VOP_*VOBJECT() 并为无全局锁的文件系统引入 MNTK_MPSAFE 标志之后的 6.0-CURRENT |
600009 | February 4, 2005 | 加入 cpufreq 框架和驱动之后的 6.0-CURRENT |
600010 | February 6, 2005 | 引入 OpenBSD 的 nc(1) 之后的 6.0-CURRENT |
600011 | February 12, 2005 | 删去并不存在的 SVID2 matherr() 支持之后的 6.0-CURRENT |
600012 | February 15, 2005 | 增大默认线程堆栈尺寸之后的 6.0-CURRENT |
600013 | February 19, 2005 | 增加了针对 <src/include/stdbool.h> 和 <src/sys/i386/include/_types.h> 的用于 Intel C/C++ 编译器的 GCC-兼容性修正。 |
600014 | February 21, 2005 | 修正了 vswprintf(3) 的 EOVERFLOW 检查之后的 6.0-CURRENT |
600015 | February 25, 2005 | 将 struct if_data 成员 ifi_epoch 从 wall 时钟时间改为 uptime 之后的 6.0-CURRENT |
600016 | February 26, 2005 | 修改 LC_CTYPE 磁盘格式之后的 6.0-CURRENT |
600017 | February 27, 2005 | 修改 NLS 编录磁盘格式之后的 6.0-CURRENT |
600018 | February 27, 2005 | 修改 LC_COLLATE 磁盘格式之后的 6.0-CURRENT |
600019 | February 28, 2005 | 将 acpica 头文件安装到 /usr/include |
600020 | March 9, 2005 | 为 send(2) API 加入了 MSG_NOSIGNAL |
600021 | March 17, 2005 | 在 cdevsw 上增加了一些字段 |
600022 | March 21, 2005 | 基本系统中删去了 gtar |
600023 | April 13, 2005 | unix(4) 中加入了 LOCAL_CREDS, LOCAL_CONNWAIT 两个 socket 选项 |
600024 | April 19, 2005 | 加入了 hwpmc(4) 及其相关工具之后的 6.0-CURRENT |
600025 | April 26, 2005 | 加入 struct icmphdr 之后的 6.0-CURRENT |
600026 | May 3, 2005 | pf 更新到了 3.7 |
600027 | May 6, 2005 | 引入了内核 libalias 和 ng_nat |
600028 | May 13, 2005 | 将 ttyname_r(3) 接口改为符合 POSIX 标准, 并通过 unistd.h 和 libc |
600029 | May 29, 2005 | 将 libpcap 升级为 v0.9.1 alpha 096 之后的 6.0-CURRENT |
600030 | June 5, 2005 | 引入 NetBSD 的 if_bridge(4) 之后的 6.0-CURRENT |
600031 | June 10, 2005 | 将 struct ifnet 从驱动的 softc 中拆出之后的 6.0-CURRENT。 |
600032 | July 11, 2005 | 引入了 libpcap v0.9.1 之后的 6.0-CURRENT。 |
600033 | July 25, 2005 | 所有自 RELENG_5 以来没有修改过的共享库的版本递增之后的 6.0-STABLE。 |
600034 | August 13, 2005 | 为 dev_clone 事件处理函数增加身份信息参数之后的 6.0-STABLE。 6.0-RELEASE。 |
600100 | November 1, 2005 | 6.0-RELEASE 之后的 6.0-STABLE |
600101 | December 21, 2005 | 将 local_startup 目录中的脚本集成到基本系统的 rcorder(8) 之后的 6.0-STABLE。 |
600102 | December 30, 2005 | 更新 ELF 类型和常量之后的 6.0-STABLE。 |
600103 | January 15, 2006 | MFC 了 pidfile(3) API 之后的 6.0-STABLE。 |
600104 | January 17, 2006 | 在 MFC 了 ldconfig_local_dirs 修改之后的 6.0-STABLE。 |
600105 | February 26, 2006 | 在 csh(1) 中加入了 NLS 目录支持之后的 6.0-STABLE。 |
601000 | May 6, 2006 | 6.1-RELEASE |
601100 | May 6, 2006 | 6.1-RELEASE 之后的 6.1-STABLE。 |
601101 | June 22, 2006 | 引入 csup 之后的 6.1-STABLE。 |
601102 | July 11, 2006 | 更新了 iwi(4) 之后的 6.1-STABLE。 |
601103 | July 17, 2006 | 将域名解析函数更新至 BIND9, 并导出了可重入版本的 netdb 函数之后的 6.1-STABLE。 |
601104 | August 8, 2006 | 在 OpenSSL 中启用了 DSO (动态共享库) 支持之后的 6.1-STABLE。 |
601105 | September 2, 2006 | 由于 802.11 修正变动了 IEEE80211_IOC_STA_INFO ioctl API 之后的 6.1-STABLE。 |
602000 | November 15, 2006 | 6.2-RELEASE |
602100 | September 15, 2006 | 6.2-RELEASE 之后的 6.2-STABLE。 |
602101 | December 12, 2006 | 加入 Wi-Spy quirk 之后的 6.2-STABLE。 |
602102 | December 28, 2006 | 增加 pci_find_extcap() 之后的 6.2-STABLE。 |
602103 | January 16, 2007 | MFC 了对 dlsym 进行修改, 使其在指定 dso 及其暗指的依赖中查找符号之后的 6.2-STABLE。 |
602104 | January 28, 2007 | MFC 了 netgraph 节点 ng_deflate(4) 和 ng_pred1(4) 以及用于 ng_ppp(4) 节点的新压缩及加密模式之后的 6.2-STABLE。 |
602105 | February 20, 2007 | MFC 了从 NetBSD 移植的 BSD 授权的 gzip(1) 之后的 6.2-STABLE。 |
602106 | March 31, 2007 | MFC 了 PCI MSI 和 MSI-X 支持之后的 6.2-STABLE。 |
602107 | April 6, 2007 | MFC 了包含宽字符支持的 ncurses 5.6 之后的 6.2-STABLE。 |
602108 | April 11, 2007 | MFC 了实现 Linux SCSI SG 直通设备 API 子集的 CAM 'SG' 设备之后的 6.2-STABLE。 |
602109 | April 17, 2007 | MFC 了 readline 5.2 patchset 002 之后的 6.2-STABLE。 |
602110 | May 2, 2007 | MFC 了用于 amd64 和 i386 的 pmap_invalidate_cache()、 pmap_change_attr()、 pmap_mapbios()、 pmap_mapdev_attr()、 and pmap_unmapbios() 之后的 6.2-STABLE。 |
602111 | June 11, 2007 | 由于 MFC 了 BOP_BDFLUSH 导致文件系统模块 KBI 变化之后的 6.2-STABLE。 |
602112 | September 21, 2007 | 一系列 libutil(3) MFC 之后的 6.2-STABLE。 |
602113 | October 25, 2007 | MFC 了宽字符和单字节 ctype 函数分拆之后的 6.2-STABLE。 新编译的引用了 ctype.h 的可执行文件, 可能会需要一个在旧系统上不存在的新增符号 __mb_sb_limit。 |
602114 | October 30, 2007 | 恢复了 ctype ABI 向前兼容性之后的 6.2-STABLE。 |
602115 | November 21, 2007 | 回退了宽字符和单字节 ctype 分拆之后的 6.2-STABLE。 |
603000 | November 25, 2007 | 6.3-RELEASE |
603100 | November 25, 2007 | 在 6.3-RELEASE 之后的 6.3-STABLE。 |
603101 | December 7, 2007 | 修正了 bit macro 的多字节支持之后的 6.3-STABLE。 |
603102 | April 24, 2008 | 为 flock 结构加入 l_sysid 之后的 6.3-STABLE。 |
603103 | May 27, 2008 | MFC 了 memrchr 函数之后的 6.3-STABLE。 |
603104 | June 15, 2008 | 为 make(1) MFC :u 变量修饰符之后的 6.3-STABLE。 |
604000 | October 4, 2008 | 6.4-RELEASE |
604100 | October 4, 2008 | 6.4-RELEASE 之后的 6.4-STABLE。 |
700000 | July 11, 2005 | 7.0-CURRENT。 |
700001 | July 23, 2005 | 所有自 RELENG_5 以来没有修改过的共享库的版本递增之后的 7.0-CURRENT。 |
700002 | August 13, 2005 | 为 dev_clone 事件处理函数中增加身份信息参数之后的 7.0-CURRENT。 |
700003 | August 25, 2005 | 将 memmem(3) 加入 libc 之后的 7.0-CURRENT。 |
700004 | October 30, 2005 | 将 solisten(9) 改为接受一 backlog 参数之后的 7.0-CURRENT。 |
700005 | November 11, 2005 | 将 IFP2ENADDR() 改为返回一 IF_LLADDR() 指针之后的 7.0-CURRENT。 |
700006 | November 11, 2005 | 在 struct ifnet 中增加 if_addr 成员, 并删除 IFP2ENADDR() 之后的 7.0-CURRENT。 |
700007 | December 2, 2005 | 将 local_startup 目录中的脚本集成到基本系统的 rcorder(8) 之后的 7.0-CURRENT。 |
700008 | December 5, 2005 | 去掉 MNT_NODEV 挂接选项之后的 7.0-CURRENT。 |
700009 | December 19, 2005 | 对 ELF-64 类型和符号版本进行变更之后的 7.0-CURRENT。 |
700010 | December 20, 2005 | 增加 hostb 和 vgapci 驱动、 pci_find_extcap(), 并将 AGP 驱动改为不再影射 aperature 之后的 7.0-CURRENT。 |
700011 | December 31, 2005 | 除 Alpha 之外的所有平台上 tv_sec 改为 time_t 之后的 7.0-CURRENT。 |
700012 | January 8, 2006 | 修改 ldconfig_local_dirs 之后的 7.0-CURRENT。 |
700013 | January 12, 2006 | 在修改了 /etc/rc.d/abi 以支持 /compat/linux/etc/ld.so.cache 以某只读文件系统上的符号连接形式存在之后的 7.0-CURRENT。 |
700014 | January 26, 2006 | 引入 pts 之后的 7.0-CURRENT。 |
700015 | March 26, 2006 | 在引入 hwpmc(4) 的第 2 版 ABI 之后的 7.0-CURRENT。 |
700016 | April 22, 2006 | 在 libc 中加入了 fcloseall(3) 之后的 7.0-CURRENT。 |
700017 | May 13, 2006 | 删去 ip6fw 之后的 7.0-CURRENT。 |
700018 | July 15, 2006 | 引入了 snd_emu10kx 之后的 7.0-CURRENT。 |
700019 | July 29, 2006 | 引入了 OpenSSL 0.9.8b 之后的 7.0-CURRENT。 |
700020 | September 3, 2006 | 增加了 bus_dma_get_tag 函数之后的 7.0-CURRENT。 |
700021 | September 4, 2006 | 在引入了 libpcap 0.9.4 和 tcpdump 3.9.4 之后的 7.0-CURRENT。 |
700022 | September 9, 2006 | 在对 dlsym 进行修改, 使其在指定 dso 及其暗指的依赖中查找符号之后的 7.0-CURRENT。 |
700023 | September 23, 2006 | 为 OSSv4 混音器 API 加入新的声音 IOCTL 之后的 7.0-CURRENT。 |
700024 | September 28, 2006 | 汇入 OpenSSL 0.9.8d 之后的 7.0-CURRENT。 |
700025 | November 11, 2006 | 加入了 libelf 之后的 7.0-CURRENT。 |
700026 | November 26, 2006 | 对音效相关的 sysctl 进行大幅调整之后的 7.0-CURRENT。 |
700027 | November 30, 2006 | 加入 Wi-Spy quirk 之后的 7.0-CURRENT。 |
700028 | December 15, 2006 | 在 libc 中加入 sctp 调用之后的 7.0-CURRENT。 |
700029 | January 26, 2007 | 将 GNU gzip(1) 实现替换为从 NetBSD 移植的采用 BSD 授权版本之后的 7.0-CURRENT。 |
700030 | February 7, 2007 | 在 IPv4 多播转发代码中删去了 IPIP 隧道封装 (VIFF_TUNNEL) 之后的 7.0-CURRENT。 |
700031 | February 23, 2007 | 修改了 bus_setup_intr() (newbus) 之后的 7.0-CURRENT。 |
700032 | March 2, 2007 | 引入了 ipw(4) 和 iwi(4) 固件之后的 7.0-CURRENT。 |
700033 | March 9, 2007 | 在 ncurses 中引入了宽字符支持之后的 7.0-CURRENT。 |
700034 | March 19, 2007 | 修改了 insmntque()、 getnewvnode() 以及 vfs_hash_insert() 工作方式之后的 7.0-CURRENT。 |
700035 | March 26, 2007 | 增加 CPU 频率变动通知机制之后的 7.0-CURRENT。 |
700036 | April 6, 2007 | 引入了 ZFS 文件系统之后的 7.0-CURRENT。 |
700037 | April 8, 2007 | 新增了实现 Linux SCSI SG 直通设备 API 子集的 CAM 'SG' 设备之后的 7.0-CURRENT。 |
700038 | April 30, 2007 | 将 getenv(3)、 putenv(3)、 setenv(3) 和 unsetenv(3) 改为符合 POSIX 之后的 7.0-CURRENT。 |
700039 | May 1, 2007 | 回退了 700038 中的变动之后的 7.0-CURRENT。 |
700040 | May 10, 2007 | 在 libutil 中增加了 flopen(3) 之后的 7.0-CURRENT。 |
700041 | May 13, 2007 | 启用了符号版本, 并将 libthr 改为默认线程库之后的 7.0-CURRENT。 |
700042 | May 19, 2007 | 引入了 gcc 4.2.0 之后的 7.0-CURRENT。 |
700043 | May 21, 2007 | 将 RELENG_6 之后未修改过版本的共享库版本增加之后的 7.0-CURRENT。 |
700044 | June 7, 2007 | 将 vn_open()/VOP_OPEN() 的参数由文件描述符数组下标改为 struct file * 之后的 7.0-CURRENT。 |
700045 | June 10, 2007 | 修改 pam_nologin(8) 使其向 PAM 框架提供帐号管理功能而非身份验证功能之后的 7.0-CURRENT。 |
700046 | June 11, 2007 | 更新 802.11 无线支持之后的 7.0-CURRENT。 |
700047 | June 11, 2007 | 增加 TCP LRO 网络接口能力之后的 7.0-CURRENT。 |
700048 | June 12, 2007 | 在 IPv4 协议栈中加入了 RFC 3678 API 支持之后的 7.0-CURRENT。 先前 IP_MULTICAST_IF ioctl 的 RFC 1724 行为被删去; 0.0.0.0/8 不再能够用于指定接口索引下标, 而应使用 struct ipmreqn 代替。 |
700049 | July 3, 2007 | 引入 OpenBSD 4.1 的 pf 之后的 7.0-CURRENT。 |
(not changed) | 为 FAST_IPSEC 增加 IPv6 支持, 删去 KAME IPSEC, 并将 FAST_IPSEC 更名为 IPSEC 之后的 7.0-CURRENT。 (未变动) | |
700050 | July 4, 2007 | 将 setenv/putenv/等等调用, 从传统 BSD 改为 POSIX 标准之后的 7.0-CURRENT。 |
700051 | July 4, 2007 | 增加新的 mmap/lseek/等等这些系统调用之后的 7.0-CURRENT。 |
700052 | July 6, 2007 | 将 I4B 头文件移动到 include/i4b 之后的 7.0-CURRENT。 |
700053 | September 30, 2007 | 增加了 PCI domain 支持之后的 7.0-CURRENT。 |
700054 | October 25, 2007 | MFC 了宽字符和单字节字符 ctype 分拆之后的 7.0-CURRENT。 |
700055 | October 28, 2007 | 7.0-RELEASE, 以及 MFC 了恢复对 FreeBSD 4/5/6 版本的 PCIOCGETCONF、 PCIOCREAD 和 PCIOCWRITE IOCTL ABI 向下兼容之后的 7.0-CURRENT, 这一变动导致 PCIOCGETCONF IOCTL 的 ABI 再次发生变化。 |
700100 | December 22, 2007 | 7.0-RELEASE 之后的 7.0-STABLE |
700101 | February 8, 2008 | MFC m_collapse() 之后的 7.0-STABLE。 |
700102 | March 30, 2008 | MFC kdb_enter_why() 之后的 7.0-STABLE。 |
700103 | April 10, 2008 | 为 flock 结构加入 l_sysid 之后的 7.0-STABLE。 |
700104 | April 11, 2008 | 在 procstat(1) MFC 之后的 7.0-STABLE。 |
700105 | April 11, 2008 | 在 MFC umtx 特性之后的 7.0-STABLE。 |
700106 | April 15, 2008 | 为 psm(4) MFC write(2) 支持之后的 7.0-STABLE。 |
700107 | April 20, 2008 | 为 fcntl(2) MFC F_DUP2FD 之后的 7.0-STABLE。 |
700108 | May 5, 2008 | 对 lockmgr(9) 做了一些修改之后的 7.0-STABLE, 在使用 lockmgr(9) 时必需包含 sys/lock.h 。 |
700109 | May 27, 2008 | MFC 了 memrchr 函数之后的 7.0-STABLE。 |
700110 | August 5, 2008 | MFC 了内核 NFS locked 客户端之后的 7.0-STABLE。 |
700111 | August 20, 2008 | 加入了对物理连续巨帧支持之后的 7.0-STABLE。 |
700112 | August 27, 2008 | 在 MFC 内核 DTrace 支持之后的 7.0-STABLE。 |
701000 | November 25, 2008 | 7.1-RELEASE |
701100 | November 25, 2008 | 7.1-RELEASE 之后的 7.1-STABLE。 |
701101 | January 10, 2009 | 合并了 strndup 之后的 7.1-STABLE。 |
701102 | January 17, 2009 | 加入了 cpuctl(4) 支持之后的 7.1-STABLE。 |
701103 | February 7, 2009 | 合并了 多/无-IPv4/v6 jail 之后的 7.1-STABLE。 |
701104 | February 14, 2009 | 在 struct mount 中保存了挂起属主, 以及在 struct vfsops 中引入了 vfs_susp_clean 方法之后的 7.1-STABLE。 |
701105 | March 12, 2009 | 对 kern.ipc.shmsegs sysctl 变量不兼容的修改, 以允许在 64bit 构架上分配更多的 SysV 共享内存段之后的 7.1-STABLE。 |
701106 | March 14, 2009 | 合并了一个对 POSIX semaphore 等待操作修正之后的 7.1-STABLE。 |
702000 | April 15, 2009 | 7.2-RELEASE |
702100 | April 15, 2009 | 7.2-RELEASE 之后的 7.2-STABLE。 |
702101 | May 15, 2009 | ichsmb(4) 改为使用左邻接辅编址来保持与其它 SMBus 控制器驱动一致性之后的 7.2-STABLE。 |
702102 | May 28, 2009 | MFC 了 fdopendir 函数之后的 7.2-STABLE。 |
702103 | June 06, 2009 | MFC 了 PmcTools 之后的 7.2-STABLE。 |
702104 | July 14, 2009 | MFC 了 closefrom 系统调用之后的 7.2-STABLE。 |
702105 | July 31, 2009 | MFC 了 SYSVIPC ABI 改动之后的 7.2-STABLE。 |
702106 | September 14, 2009 | MFC 了 x86 PAT 增强, 并新增了 d_mmap_single() 以及 scatter/gather 型 VM 对象类型之后的 7.2-STABLE。 |
703000 | February 9, 2010 | 7.3-RELEASE |
703100 | February 9, 2010 | 7.3-RELEASE 之后的 7.3-STABLE。 |
704000 | December 22, 2010 | 7.4-RELEASE |
704100 | December 22, 2010 | 7.4-RELEASE 之后的 7.4-STABLE。 |
800000 | October 11, 2007 | 8.0-CURRENT。 分拆了宽字符和单字节字符 ctype。 |
800001 | October 16, 2007 | 引入了 libpcap 0.9.8 和 tcpdump 3.9.8 之后的 8.0-CURRENT。 |
800002 | October 21, 2007 | 将 kthread_create() 系列函数改名为 kproc_create() 之后的 8.0-CURRENT。 |
800003 | October 24, 2007 | 恢复了对 FreeBSD 4/5/6 版本的 PCIOCGETCONF、 PCIOCREAD 和 PCIOCWRITE IOCTL ABI 向下兼容之后的 8.0-CURRENT, 这一变动导致 PCIOCGETCONF IOCTL 的 ABI 再次发生变化。 |
800004 | November 12, 2007 | 将 agp(4) 驱动从 src/sys/pci 挪到 src/sys/dev/agp 之后的 8.0-CURRENT。 |
800005 | December 4, 2007 | 修改了 jumbo frame 分配器之后的 8.0-CURRENT。 |
800006 | December 7, 2007 | 在给 hwpmc(4) 加入了 callgraph 捕捉功能后的 8.0-CURRENT |
800007 | December 25, 2007 | kdb_enter() 增加 "why" 参数之后的 8.0-CURRENT。 |
800008 | December 28, 2007 | 在去除 LK_EXCLUPGRADE 选项后的 8.0-CURRENT。 |
800009 | January 9, 2008 | 引入 lockmgr_disown(9) 之后的 8.0-CURRENT。 |
800010 | January 10, 2008 | 修改 vn_lock(9) 原型之后的 8.0-CURRENT。 |
800011 | January 13, 2008 | 修改 VOP_LOCK(9) 和 VOP_UNLOCK(9) 原型之后的 8.0-CURRENT。 |
800012 | January 19, 2008 | 引入 lockmgr_recursed(9)、 BUF_RECURSED(9) 和 BUF_ISLOCKED(9) 并删除了 BUF_REFCNT() 之后的 8.0-CURRENT。 |
800013 | January 23, 2008 | 引入 “ASCII” 编码之后的 8.0-CURRENT。 |
800014 | January 24, 2008 | 修改 lockmgr(9) 并删除了 lockcount() 和 LOCKMGR_ASSERT() 之后的 8.0-CURRENT。 |
800015 | January 26, 2008 | 扩展了 fts(3) 数据结构之后的 8.0-CURRENT。 |
800016 | February 1, 2008 | 为 MEXTADD(9) 增加了一个参数之后的 8.0-CURRENT。 |
800017 | February 6, 2008 | 为 lockmgr(9) 引入 LK_NODUP 和 LK_NOWITNESS 选项后的 8.0-CURRENT。 |
800018 | February 8, 2008 | 引入 m_collapse 之后的 8.0-CURRENT。 |
800019 | February 9, 2008 | 为 sysctl 变量 kern.proc.filedesc 加入 当前工作目录,root 目录和 jail 目录支持之后的 8.0-CURRENT。 |
800020 | February 13, 2008 | 引入 lockmgr_assert(9) 之后的 8.0-CURRENT。 |
800021 | February 15, 2008 | 引入 lockmgr_args(9) 和移除 LK_INTERNAL 标志之后的 8.0-CURRENT。 |
800022 | (backed out) | 把 BSD ar(1) 作为系统默认的 ar 之后的 8.0-CURRENT。 |
800023 | February 25, 2008 | 修改了 lockstatus(9) 和 VOP_ISLOCKED(9) 原型,特别时去掉 struct thread 参数之后的 8.0-CURRENT。 |
800024 | March 1, 2008 | 砍掉了 lockwaiters 和 BUF_LOCKWAITERS 函数, brelvp 的返回值从 void 修改成 int,并引入 lockinit(9) 新标志之后的 8.0-CURRENT。 |
800025 | March 8, 2008 | 为 fcntl(2) 引入 F_DUP2FD 之后的 8.0-CURRENT。 |
800026 | March 12, 2008 | 修改了 cv_broadcastpri 优先权参数之后的 8.0-CURRENT,比如 0 表示无优先权。 |
800027 | March 24, 2008 | 修改了 bpf 监测 ABI, 加入了 zerocopy bpf buffer 之后的 8.0-CURRENT。 |
800028 | March 26, 2008 | 为 flock 结构增加了 l_sysid 之后的 8.0-CURRENT。 |
800029 | March 28, 2008 | 重新整合了 BUF_LOCKWAITERS 函数并加入 lockmgr_waiters(9) 之后的 8.0-CURRENT。 |
800030 | April 1, 2008 | 引入 rw_try_rlock(9) 和 rw_try_wlock(9) 之后的 8.0-CURRENT。 |
800031 | April 6, 2008 | 引入 lockmgr_rw 和 lockmgr_args_rw 函数之后的 8.0-CURRENT。 |
800032 | April 8, 2008 | 实现了 openat 和相关的系统调用,为 open(2) 引入了 O_EXEC 标志,和提供了相应的 linux 兼容的系统调用之后的 8.0-CURRENT。 |
800033 | April 8, 2008 | 为 psm(4) 增加了原生的 write(2) 支持之后的 8.0-CURRENT。 现在任意命令可写入 /dev/psm%d 并读出状态。 |
800034 | April 10, 2008 | 引入 memrchr 函数之后的 8.0-CURRENT。 |
800035 | April 16, 2008 | 引入 fdopendir 函数之后的 8.0-CURRENT |
800036 | April 20, 2008 | 无线部分转向 multi-bss (也叫做 vaps) 支持之后的 8.0-CURRENT。 |
800037 | May 9, 2008 | 加入多路由表支持 (也就是 setfib(1)、 stfib(2)) 后的 8.0-CURRENT。 |
800038 | May 26, 2008 | 删去了 netatm 和 ISDN4BSD 后的 8.0-CURRENT。 这个版本也表示增加了 Compact C Type (CTF) 工具。 |
800039 | June 14, 2008 | 移除 sgtty 之后的 8.0-CURRENT。 |
800040 | June 26, 2008 | 增加了内核级 NFS lockd 客户端的 8.0-CURRENT。 |
800041 | July 22, 2008 | 增加了 arc4random_buf(3) 和 arc4random_uniform(3) 之后的 8.0-CURRENT。 |
800042 | August 8, 2008 | 增加了 cpuctl(4) 之后的 8.0-CURRENT。 |
800043 | August 13, 2008 | 修改 bpf(4) 使用单一的设备节点而不是克隆之后的 8.0-CURRENT。 |
800044 | August 17, 2008 | 在提交了 vimage 项目第一步之后的 8.0-CURRENT。把全局变量重命名为虚拟化带 V_ 前缀并用宏映射到原来的全局名称。 |
800045 | August 20, 2008 | 引入 MPSAFE TTY 层之后的 8.0-CURRENT, 包括对相关驱动和工具的修改。 |
800046 | September 8, 2008 | 将 amd64 架构上 GDT 拆分到不同 CPU 之后的 8.0-CURRENT。 |
800047 | September 10, 2008 | 删去了 VSVTX、 VSGID 和 VSUID 之后的 8.0-CURRENT。 |
800048 | September 16, 2008 | 将内核中 NFS 挂接部分的代码改为能够通过 nmount() iovec, 而不再是大的 nfs_args 结构体作为参数之后的 8.0-CURRENT。 |
800049 | September 17, 2008 | 删去了 suser(9) 和 suser_cred(9) 之后的 8.0-CURRENT。 |
800050 | October 20, 2008 | 修改了缓冲存储器 API 之后的 8.0-CURRENT。 |
800051 | October 23, 2008 | 删去了 MALLOC(9) 和 FREE(9) 宏之后的 8.0-CURRENT。 |
800052 | October 28, 2008 | 引入了 accmode_t 和重新命名 VOP_ACCES 'a_mode' 为 a_accmode 之后的 8.0-CURRENT。 |
800053 | November 2, 2008 | 修改了 vfs_busy(9) 原型并引入了 MBF_NOWAIT 和 MBF_MNTLSTLOCK 标志之后的 8.0-CURRENT。 |
800054 | November 22, 2008 | 增加了 buf_ring、 内存栅以及 ifnet 函数, 以方便撰写支持多硬件传输队列的驱动, 以及无锁环形缓冲实现的驱动程序, 并更高效地管理包队列功能之后的 8.0-CURRENT。 |
800055 | November 27, 2008 | 引入了 hwpmc(4) 对于 Intel™ Core,Core2 和 Atom 的支持之后的 8.0-CURRENT。 |
800056 | November 29, 2008 | 引入了 multi-/no-IPv4/v6 jail 之后的 8.0-CURRENT。 |
800057 | December 1, 2008 | 将 ath hal 改为使用源代码之后的 8.0-CURRENT。 |
800058 | December 12, 2008 | 引入了 VOP_VPTOCNP 操作之后的 8.0-CURRENT。 |
800059 | December 15, 2008 | 引入了新的 arp-v2 重写之后的 8.0-CURRENT。 |
800060 | December 19, 2008 | 引入了 makefs 之后的 8.0-CURRENT。 |
800061 | January 15, 2009 | 引入了 TCP Appropriate Byte Counting 之后的 8.0-CURRENT。 |
800062 | January 28, 2009 | 删去了 minor()、 minor2unit()、 unit2minor() 等之后的 8.0-CURRENT。 |
800063 | February 18, 2009 | 在 GENERIC 配置中改为使用 USB2 栈之后的 8.0-CURRENT; 这个数值同时也标志新增了 fdevname(3)。 |
800064 | February 23, 2009 | 将 USB2 栈移动并替换 dev/usb 之后的 8.0-CURRENT。 |
800065 | February 26, 2009 | 在对 libmp(3) 中所有函数更名之后的 8.0-CURRENT。 |
800066 | February 27, 2009 | 更改了 USB devfs 管理和布局之后的 8.0-CURRENT。 |
800067 | February 28, 2009 | 加入了 getdelim(), getline(), stpncpy(), strnlen(), wcsnlen(), wcscasecmp(), 和 wcsncasecmp() 之后的 8.0-CURRENT。 |
800068 | March 2, 2009 | 在 usbhub devclass 更名为 uhub 之后的 8.0-CURRENT。 |
800069 | March 9, 2009 | 重命名 libusb20.so.1 为 libusb.so.1 之后的 8.0-CURRENT。 |
800070 | March 9, 2009 | 合并 IGMPv3 和 Source-Specific Multicast (SSM) 入 IPv4 栈之后的 8.0-CURRENT。 |
800071 | March 14, 2009 | 为 gcc 打上了在 c99 和 gnu99 模式中使用 C99 inline 语义补丁之后的 8.0-CURRENT。 |
800072 | March 15, 2009 | 移除了 IFF_NEEDSGIANT 标志; 不再支持非线程安全的网络设备驱动之后的 8.0-CURRENT。 |
800073 | March 18, 2009 | 实现了 rpath 动态字符替换之后的 8.0-CURRENT. |
800074 | March 24, 2009 | 引入了 tcpdump 4.0.0 和 libpcap 1.0.0 之后的 8.0-CURRENT。 |
800075 | April 6, 2009 | 修改了 structs vnet_net、 vnet_inet 和 vnet_ipfw 结构布局之后的 8.0-CURRENT。 |
800076 | April 9, 2009 | 为 dummynet 新增了延迟评估工具之后的 8.0-CURRENT。 |
800077 | April 14, 2009 | 删去了 VOP_LEASE() 和 vop_vector.vop_lease 之后的 8.0-CURRENT |
800078 | April 15, 2009 | 在 struct rt_metrics 和 struct rt_metrics_lite 中添加了 rt_weight 字段, 导致其结构发生变化之后的 8.0-CURRENT。 此后 RTM_VERSION 增加, 但又回退了。 |
800079 | April 15, 2009 | 在 struct route 和 struct_in6 中添加了 struct llentry 指针之后的 8.0-CURRENT。 |
800080 | April 15, 2009 | 改变了 struct inpcb 布局之后的 8.0-CURRENT。 |
800081 | April 19, 2009 | 改变了 malloc_type 布局之后的 8.0-CURRENT。 |
800082 | April 21, 2009 | 改变了 struct ifnet 布局, 并增加了 if_ref() 和 if_rele() 引用计数维护功能之后的 8.0-CURRENT。 |
800083 | April 22, 2009 | 实现了底层蓝牙 HCI API 之后的 8.0-CURRENT。 |
800084 | April 29, 2009 | 修改了 IPv6 SSM 和 MLDv2 之后的 8.0-CURRENT。 |
800085 | April 30, 2009 | 启用了包括一个活跃映像的 VIMAGE 内核支持之后的 8.0-CURRENT。 |
800086 | May 8, 2009 | 为 patch(1) 增加任意长输入行支持之后的 8.0-CURRENT。 |
800087 | May 11, 2009 | 修改了一些 VFS KPI 之后的 8.0-CURRENT。 VFS 的 FSD 部分中删去了线程参数。 VFS_* 函数并不需要这些上下文信息, 因为它总是与 curthread 相关。 在某些特殊情况中, 则保留了原先的行为。 |
800088 | May 20, 2009 | 对 net80211 监视模式进行调整之后的 8.0-CURRENT。 |
800089 | May 23, 2009 | 增加了 UDP 控制块支持之后的 8.0-CURRENT。 |
800090 | May 23, 2009 | 将网络接口克隆虚拟化之后的 8.0-CURRENT。 |
800091 | May 27, 2009 | 增加了层次式 jail 并取消全局 securelevel 之后的 8.0-CURRENT。 |
800092 | May 29, 2009 | 修改了 sx_init_flags() KPI 之后的 8.0-CURRENT。 SX_ADAPTIVESPIN 退役, 而新增的 SX_NOADAPTIVE 标志则表达相反语义。 |
800093 | May 29, 2009 | 为 struct mount 增加 mnt_xflag 之后的 8.0-CURRENT。 |
800094 | May 30, 2009 | 新增了 VOP_ACCESSX(9) 之后的 8.0-CURRENT。 |
800095 | May 30, 2009 | 调整轮询 KPI (polling KPI) 之后的 8.0-CURRENT。 轮询处理程序会返回处理过的包的数量。 新增的 IFCAP_POLLING_NOCOUNT 则表示返回值不重要, 并跳过计数。 |
800096 | June 1, 2009 | 对新的 netisr 进行了改进, 并调整了保存和存取 FIB 方式之后的 8.0-CURRENT。 |
800097 | June 8, 2009 | 引入了 vnet 析构挂钩和相关基础设施之后的 8.0-CURRENT。 |
800097 | June 11, 2009 | 引入了 netgraph 输出到输入路径调用检测和排队机制, 并调整了 struct thread 布局之后的 8.0-CURRENT。 |
800098 | June 14, 2009 | 引入了 OpenSSL 0.9.8k 之后的 8.0-CURRENT。 |
800099 | June 22, 2009 | 更新了 NGROUPS 并将路由虚拟化挪到它自己的 VImage 模块之后的 8.0-CURRENT。 |
800100 | June 24, 2009 | 修改了 SYSVIPC ABI 之后的 8.0-CURRENT。 |
800101 | June 29, 2009 | 删去了与网络接口一一对应的 /dev/net/* 字符设备之后的 8.0-CURRENT。 |
800102 | July 12, 2009 | 在 struct sackhint、 struct tcpcb 以及 struct tcpstat 上增加占位元素之后的 8.0-CURRENT。 |
800103 | July 13, 2009 | 将 TOE 驱动接口中的 struct tcpopt 替换为 TCP syncache 中的 struct toeopt 之后的 8.0-CURRENT。 |
800104 | July 14, 2009 | 新增了基于 linker-set 的 per-vnet 分配器之后的 8.0-CURRENT。 |
800105 | July 19, 2009 | 递增了所有未使用符号版本的动态连接库版本之后的 8.0-CURRENT。 |
800106 | July 24, 2009 | 引入 VM 对象类型 OBJT_SG 之后的 8.0-CURRENT。 |
800107 | August 2, 2009 | 通过加入 newbus sxlock 使 newbus 子系统不再使用 Giant, 以及 8.0-RELEASE。 |
800108 | November 21, 2009 | 实现了 EVFILT_USER kevent 过滤器之后的 8.0-STABLE。 |
800500 | January 7, 2010 | 令 pkg_add -r 使用 packages-8-stable 的 __FreeBSD_version 版本变化的 8.0-STABLE。 |
800501 | January 24, 2010 | 调整了 scandir(3) 和 alphasort(3) 函数原型, 使其符合 SUSv4 之后的 8.0-STABLE。 |
800502 | January 31, 2010 | 新增了 sigpause(3) 之后的 8.0-STABLE。 |
800503 | February 25, 2010 | 新增了用于管理网络接口说明的 SIOCGIFDESCR 和 SIOCSIFDESCR ioctl 之后的 8.0-STABLE。 这组接口受到了 OpenBSD 的启发。 |
800504 | March 1, 2010 | MFC 了 x86emu, 来自 OpenBSD 的 x86 CPU 实模式模拟器之后的 8.0-STABLE。 |
800505 | May 18, 2010 | MFC 了添加 liblzma, xz, xzdec 以及 lzmainfo 之后的 8.0-STABLE。 |
801000 | June 14, 2010 | 8.1-RELEASE |
801500 | June 14, 2010 | 8.1-RELEASE 之后的 8.1-STABLE。 |
801501 | November 3, 2010 | 用于 PL_FLAG_SCE/SCX/EXEC/SI 的 struct sysentvec 的 KBI 以及 用于 ptrace(PT_LWPINFO) 的 pl_siginfo 的 KBI 改变之后的 8.1-STABLE。 |
802000 | December 22, 2010 | 8.2-RELEASE |
802500 | December 22, 2010 | 8.2-RELEASE 之后的 8.2-STABLE。 |
802501 | February 28, 2011 | 合并了 DTrace 变动, 包含用户态跟踪支持之后的 8.2-STABLE。 |
802502 | March 6, 2011 | 在 libm 中合并了 log2 和 log2f 之后的 8.2-STABLE。 |
802503 | May 1, 2011 | 将 gcc 升级至 FSF gcc-4_2-branch 最后一个 GPLv2 版本之后的 8.2-STABLE。 |
802504 | May 28, 2011 | 引入模块化拥塞控制支持基础设施和 KPI 之后的 8.2-STABLE。 |
802505 | May 28, 2011 | 引入了 Hhook 和 Khelp KPI 之后的 8.2-STABLE。 |
802506 | May 28, 2011 | 在 tcpcb 结构中增加 OSD 之后的 8.2-STABLE。 |
802507 | June 6, 2011 | 引入 ZFS v28 之后的 8.2-STABLE。 |
802508 | June 8, 2011 | 删去了 sv_schedtail struct sysvec 方法之后的 8.2-STABLE。 |
802509 | July 14, 2011 | 在 binutils 中合并了 SSE3 支持之后的 8.2-STABLE。 |
802510 | July 19, 2011 | 为 rfork(2) 添加了 RFTSIGZMB 标志之后的 8.2-STABLE。 |
900000 | August 22, 2009 | 9.0-CURRENT。 |
900001 | September 8, 2009 | 引入了 x86emu, 来自 OpenBSD 的 x86 CPU 实模式模拟器之后的 9.0-CURRENT。 |
900002 | September 23, 2009 | 实现了 EVFILT_USER kevent 过滤器之后的 9.0-CURRENT。 |
900003 | December 2, 2009 | 新增了 sigpause(3) 以及 csu 的 PIE 支持之后的 9.0-CURRENT。 |
900004 | December 6, 2009 | 新增了 libulog 及其 libutempter 兼容接口之后的 9.0-CURRENT。 |
900005 | December 12, 2009 | 新增了用于查询指定休眠队列上等待者数量的 sleepq_sleepcnt() 函数之后的 9.0-CURRENT。 |
900006 | January 4, 2010 | 调整了 scandir(3) 和 alphasort(3) 函数原型, 使其符合 SUSv4 之后的 9.0-CURRENT。 |
900007 | January 13, 2010 | 删去了 utmp(5) 并增加了 utmpx (参阅 getutxent(3) ) 以改善用户登录日志和系统事件支持之后的 9.0-CURRENT。 |
900008 | January 20, 2010 | 9.0-CURRENT 引入了 BSD 授权的 bc/dc 并将 GNU bc/dc 标注为过时之后的 9.0-CURRENT。 |
900009 | January 26, 2010 | 新增了用于管理网络接口说明的 SIOCGIFDESCR 和 SIOCSIFDESCR ioctl 之后的 9.0-CURRENT。 这组接口受到了 OpenBSD 的启发。 |
900010 | March 22, 2010 | 引入了 zlib 1.2.4 之后的 9.0-CURRENT。 |
900011 | April 24, 2010 | 添加了 soft-updates 日志功能之后的 9.0-CURRENT。 |
900012 | May 10, 2010 | 添加了 liblzma, xz, xzdec 以及 lzmainfo 之后的 9.0-CURRENT。 |
900013 | May 24, 2010 | 添加了针对 linux(4) 的 USB 修正之后的 9.0-CURRENT。 |
900014 | Jun 10, 2010 | 添加了 Clang 之后的 9.0-CURRENT。 |
900015 | July 22, 2010 | 引入了 BSD grep 之后的 9.0-CURRENT。 |
900016 | July 28, 2010 | 在 struct malloc_type_internal 中加入了 mti_zone 之后的 9.0-CURRENT。 |
900017 | August 23, 2010 | 默认 grep 改回使用 GNU grep 并增加 WITH_BSD_GREP 开关之后的 9.0-CURRENT。 |
900018 | August 24, 2010 | 将 pthread_kill(3) 产生的信号在 si_code 中改为使用 SI_LWP 标记之后的 9.0-CURRENT。 之前, si_code 对应的标志为 SI_USER。 |
900019 | August 28, 2010 | 为 mmap(2) 新增了 MAP_PREFAULT_READ 标志之后的 9.0-CURRENT。 |
900020 | September 9, 2010 | 为 sbuf 增加了 drain 功能并改变了 struct sbuf 布局之后的 9.0-CURRENT。 |
900021 | September 13, 2010 | DTrace 增加用户态跟踪支持之后的 9.0-CURRENT。 |
900022 | October 2, 2010 | 新增了 BSDL man 工具, 并淘汰 GNU/GPL man 工具之后的 9.0-CURRENT。 |
900023 | October 11, 2010 | 引入 20101010 git 快照版本 xz 之后的 9.0-CURRENT。 |
900024 | November 11, 2010 | 将 libgcc.a 替换为 libcompiler_rt.a 之后的 9.0-CURRENT。 |
900025 | November 12, 2010 | 引入了模块化拥塞控制之后的 9.0-CURRENT。 |
900026 | November 30, 2010 | 引入串行管理协议 (SMP) 直通, 以及与之对应的 CAM CCB XPT_SMP_IO 和 XPT_GDEV_ADVINFO 之后的 9.0-CURRENT。 |
900027 | December 5, 2010 | 在 libm 中增加 log2 之后的 9.0-CURRENT。 |
900028 | December 21, 2010 | 添加了 Hhook (Helper Hook)、 Khelp (Kernel Helpers) 和 Object Specific Data (OSD) KPI 之后的 9.0-CURRENT。 |
900029 | December 28, 2010 | 修改 TCP 协议栈使其允许 Khelp 模块通过 helper hook 指针, 与 TCP 控制块交互并保存连接数据之后的 9.0-CURRENT。 |
900030 | January 12, 2011 | 将 libdialog 更新至版本 20100428 之后的 9.0-CURRENT。 |
900031 | February 7, 2011 | 添加了 pthread_getthreadid_np(3) 之后的 9.0-CURRENT。 |
900032 | February 8, 2011 | 删除了 uio_yield 函数原型和符号之后的 9.0-CURRENT。 |
900033 | February 18, 2011 | 将 binutils 更新至 2.17.50 之后的 9.0-CURRENT。 |
900034 | March 8, 2011 | 修改了 struct sysvec (sv_schedtail) 之后的 9.0-CURRENT。 |
900035 | March 29, 2011 | 将基本系统中 gcc 和 libstdc++ 升级至最后的 GPLv2 授权版本之后的 9.0-CURRENT。 |
900036 | April 18, 2011 | 在基本系统中删去了 libobjc 和 Objective-C 支持之后的 9.0-CURRENT。 |
900037 | May 13, 2011 | 在基本系统中引入了 libprocstat(3) 函数库以及 fuser(1) 工具之后的 9.0-CURRENT。 |
900038 | May 22, 2011 | 为 VFS_FHTOVP(9) 添加锁标志参数之后的 9.0-CURRENT。 |
900039 | June 28, 2011 | 引入了来自 OpenBSD 4.5 的 pf 之后的 9.0-CURRENT。 |
900040 | July 19, 2011 | 将 amd64 和 ia64 平台上的 MAXCPU 提高到 64, 并把 XLP (mips) 上的值提高到 128 之后的 9.0-CURRENT。 |
900041 | August 13, 2011 | 实现了 Capsicum capabilities 之后的 9.0-CURRENT。 fget(9) 新增了权限参数。 |
900042 | August 28, 2011 | 提高修改过 ABI 的动态连接库版本号之后的 9.0-CURRENT。 |
900043 | September 2, 2011 | 增加了对不支持 SCSI 快取缓存同步功能的 USB 大容量存储设备自动检测功能之后的 9.0-CURRENT。 |
900044 | September 10, 2011 | 重构了 auto-quirk 之后的 9.0-CURRENT。 |
900045 | Oct 13, 2011 | 将非兼容性系统调用入口点全部增加 sys_ 前缀之后的 9.0-CURRENT。 |
注意:
请注意, 2.2.5-RELEASE 之后有一段时间的 2.2-STABLE 会声称自己是 “2.2.5-STABLE”。 这种模式的版本号表示的是年月。 但随后, 我们决定, 从 2.2 开始, 将它改为更为简洁的 主/次 版本号的形式来命名版本。 这是因为并行地在多个分支上进行开发, 使得通过实际的发布日期来区分不同的版本变得不再现实。 如果您正在做新的 port, 应该不需要担心较早的 -CURRENT; 在此列出仅供参考。
12.6. 在 bsd.port.mk
之后写一些内容
不要在 .include <bsd.port.mk>
这行之后增加任何内容。 这通常可以通过在您的 Makefile
中间的某处引用 bsd.port.pre.mk
, 并在结尾的地方引用 bsd.port.post.mk
来避免。
注意:
只能够采用 bsd.port.pre.mk
/bsd.port.post.mk
或 bsd.port.mk
两种写法之一; 任何时候都不要同时使用两种写法。
bsd.port.pre.mk
只定义了很少的变量, 它们可以在 Makefile
中用于进行一些测试, 而 bsd.port.post.mk
则定义了所有其它的变量。
下面是一些由 bsd.port.pre.mk
定义的比较重要的变量 (这并不是一份完整的列表, 您可以阅读 bsd.port.mk
以获得全部变量的名字)。
变量 | 描述 |
---|---|
ARCH | 由 uname -m 输出得到的硬件架构的名字 (例如, i386 ) |
OPSYS | 由 uname -s 返回的操作系统类型 (例如, FreeBSD ) |
OSREL | 操作系统的版本号 (例如 2.1.5 或 2.2.7 ) |
OSVERSION | 操作系统的版本号的数值形式; 它等于 __FreeBSD_version 。 |
PORTOBJFORMAT | 系统默认的执行文件格式 (elf 或 aout ; 请注意, “现代的” FreeBSD 版本中, aout 已在淘汰之列。) |
LOCALBASE | “local” 目录的根 (例如, /usr/local/ ) |
PREFIX | port 应被安装到哪里 (参见 关于 PREFIX 的更多说明)。 |
注意:
如果您需要定义 USE_IMAKE
, USE_X_PREFIX
, 或 MASTERDIR
这些变量, 则应在引用 bsd.port.pre.mk
之前完成。
下面是一些在引用 bsd.port.pre.mk
之后可以进行的判断:
# 如果 perl5 已经在系统中提供, 则不必编译 lang/perl5 .if ${OSVERSION} > 300003 BROKEN= perl is in system .endif # ELF 只使用一个 shlib 版本 .if ${PORTOBJFORMAT} == "elf" TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR} .else TCL_LIB_FILE= ${TCL_LIB}.${SHLIB_MAJOR}.${SHLIB_MINOR} .endif # 软件会自动为 ELF 创建符号链接, 但 a.out 则需要另行创建 post-install: .if ${PORTOBJFORMAT} == "aout" ${LN} -sf liblinpack.so.1.0 ${PREFIX}/lib/liblinpack.so .endif
您还记得应该在 BROKEN=
和 TCL_LIB_FILE=
后面使用制表符, 而不是空格, 对吧? :-)
12.7. 在 wrapper 脚本中使用 exec
语句
如果 port 安装了用以启动其他程序的脚本, 并且运行其他程序是这些脚本的最后一项操作, 请务必使用 exec
语句来运行这些程序, 例如:
#!/bin/sh exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"
使用 exec
语句表示执行指定的程序来取代 shell 进程。 如果省略了 exec
, 则 shell 进程会一直在内存中, 从而不必要地消耗了额外的系统资源。
12.8. 理性行事
任何 Makefile
都应该简单并理性地行事。 如果您能让其中的条目更为简单和易读, 一定要这样做。 例如, 使用 make 提供的 .if
结构, 而不要使用 shell 的 if
, 只要能重定义 EXTRACT*
就不要重载 do-extract
, 尽量使用 GNU_CONFIGURE
而不是 CONFIGURE_ARGS += --prefix=${PREFIX}
。
如果您在尝试做什么事情的时候发现不得不写大量的代码, 请回过头来复审一下 bsd.port.mk
, 看看是否有您正打算做的事情的现成实现。 尽管读起来可能很费劲, 但有很多貌似很难的问题, 在 bsd.port.mk
中都给出了十分简便的解决方案。
12.9. 遵循 CC
和 CXX
设置
port 应遵循 CC
和 CXX
变量的设置。 这也就是说, port 不应使用绝对的方式来设置这个变量的值, 而罔顾已经存在的设置; 与此相反, 它应该在其值后加入需要的其它值。 这样, 就可以设置全局的联编选项, 令其影响所有的 port 联编过程了。
如果实在无法这样做, 请在 Makefile
中加入 NO_PACKAGE=ignores cflags
。
下面的 Makefile
实例给出了如何遵循 CC
和 CXX
变量的设置。 注意这里用到的 ?=
:
CC?= gcc
CXX?= g++
下面则是没有遵循 CC
和 CXX
的例子:
CC= gcc
CXX= g++
在 FreeBSD 系统中, CC
和 CXX
这两个变量都可以在 /etc/make.conf
中自行定义。 第一个例子只有在 /etc/make.conf
中没有定义时才对这两个变量进行定义, 从而保持了系统范围的配置。 而第二个例子则会覆盖任何现有的配置。
12.10. 遵循 CFLAGS
您的 port 应遵循 CFLAGS
变量的设置。 这也就是说, port 不应使用绝对的方式来设置这个变量的值, 而罔顾已经存在的设置; 与此相反, 它应该在其值后加入需要的其它值, 这样, 就可以设置全局的联编选项, 令其影响所有的 port 联编过程了。
如果实在无法这样做, 请在 Makefile
中加入 NO_PACKAGE=ignores cflags
。
下面的 Makefile
例子, 可以帮助我们理解如何遵循 CFLAGS
的设置。 注意所用的 +=
:
CFLAGS+= -Wall -Werror
下面是一个未能遵循 CFLAGS
设置的例子:
CFLAGS= -Wall -Werror
一般来说, CFLAGS
在 FreeBSD 系统中是在 /etc/make.conf
里配置的。 第一个例子在 CFLAGS
变量中增加了一些参数, 并保持了所有系统预定义的标志。 而第二个例子, 则会覆盖掉任何先前定义的参数。
您应从第三方软件的 Makefile
中去掉特殊的优化设置。 系统的 CFLAGS
给出了全系统范围内的优化设置参数。 下面是一个未经修改的 Makefile
实例:
CFLAGS= -O3 -funroll-loops -DHAVE_SOUND
如果使用系统的优化参数, 则 Makefile
中的设置应该类似下面这样:
CFLAGS+= -DHAVE_SOUND
12.11. 线程库
在 FreeBSD 上, 线程库必须通过特殊的连接器参数 -pthread
连接到可执行文件。 如果 port 一定要直接连接 -lpthread
或 -lc_r
, 则应将其改为使用由 ports 框架提供的 PTHREAD_LIBS
。 这个变量的值通常是 -pthread
, 但在某些特定平台上的 FreeBSD 版本中, 它可能是其它值, 因此, 不要将 -pthread
硬编码到您的补丁中, 而应使用 PTHREAD_LIBS
变量。
注意:
如果设置了 PTHREAD_LIBS
, 而在联编时出现 unrecognized option '-pthread'
这样的错误, 可能需要通过将 CONFIGURE_ENV
设为 LD=${CC}
来使用 gcc
作为连接器。 -pthread
这一选项并不为 ld
所直接支持。
12.12. 反馈
如果进行了一些很好的修改和补丁, 一定要把它们发回给原作者, 或维护者, 以便在下一版本的代码中包含它们。 这会让您在软件发布新版本的时候变得轻松一些。
12.13. README.html
不要包含 README.html
文件。 这个文件并非 CVS 代码库中的一部分, 它是由 make readme
命令生成的。
12.14. 使用 BROKEN
、 FORBIDDEN
或 IGNORE
阻止用户安装 port
某些时候会需要阻止用户安装某个 port。 想要告诉用户某个 port 不应被安装, 有许多可以在 port 的 Makefile
中使用的 make
变量。 下列 make
的值, 将是在用户试图安装时得到的提示信息。 务请使用正确的 make
变量, 因为每一个都表达了截然不同的意义, 而且许多自动化系统, 例如 port 联编集群、 FreshPorts, 以及 portsmon, 都依赖于 Makefile
的正确性。
12.14.1. 变量
BROKEN
专门用于表达目前无法正确编译、 安装或卸载这类问题。 如果是临时性的问题, 则可以使用它。如果进行了相关的配置, 则联编集群仍将尝试联编它, 以确认导致问题的深层问题是否已被解决。 (不过, 一般情况下, 联编集群并不会这样做。)
举例来说, 当 port 发生下述情况时, 应使用
BROKEN
:无法编译 (does not compile)
无法正确进行配置或安装操作
在
${LOCALBASE}
以外的地方安装文件卸载时无法删除所安装的全部文件 (不过, 留下用户改过的文件可接受的, 因为可能希望这样作)
FORBIDDEN
用于表示 ports 中包含安全漏洞, 或者可能会给安装了这个 port 的 FreeBSD 系统带来严重的安全隐患 (例如: 一个很不安全的程序, 或包含了能够被轻易攻陷的服务的软件)。 如果发现了安全漏洞, 而其作者没有发布升级版本, 则应立即把那个 port 标记为FORBIDDEN
。 理想情况下, 包含安全漏洞的 port 应被尽快升级, 以便减少包含漏洞的 FreeBSD 主机的数量 (我们希望保持良好的安全记录), 然而, 有时在安全漏洞的披露和软件更新之间可能会有一个间隔, 此时应予以说明。 除了安全之外, 请不要以任何其它理由将 port 标记为FORBIDDEN
。IGNORE
用来表示 port 由于某些其它原因不应予以联编。 如果认为发生了结构性的问题, 则应使用它。 任何情况下, 联编集群都不会联编标记为IGNORE
的 port。 以下是使用IGNORE
的一些例子:能够编译但无法正常运行
无法与运行的 FreeBSD 版本一同工作
联编时需要 FreeBSD 内核的源代码, 但用户没有安装它们
由于授权原因, 必须手工下载 distfile
无法与的某个已安装的 port 一同工作 (例如, port 依赖于 www/apache21 而安装的则是 www/apache13)
注意:
如果 port 与某个已经安装的 port 冲突 (例如, 它们在同一位置安装同名但功能不同的文件), 则应 使用
CONFLICTS
来标记它。CONFLICTS
将自动地设置IGNORE
。如果 port 只应在某些平台上标记为
IGNORE
, 还有另外两个方便使用的IGNORE
变量可供选择:ONLY_FOR_ARCHS
和NOT_FOR_ARCHS
。 例如:ONLY_FOR_ARCHS= i386 amd64
NOT_FOR_ARCHS= alpha ia64 sparc64
可以使用
ONLY_FOR_ARCHS_REASON
和NOT_FOR_ARCHS_REASON
来配置定制的IGNORE
消息。 此外, 还可以使用ONLY_FOR_ARCHS_REASON_
和ARCH
NOT_FOR_ARCHS_REASON_
来分别指定与具体平台有关的信息。ARCH
如果 port 会下载并安装用于 i386 的预编译二进制文件, 则应设置
IA32_BINARY_PORT
。 如果设置了这个变量, 则系统会检查是否已经在/usr/lib32
目录中安装了 IA32 版本的函数库, 以及内核是否提供了 IA32 兼容支持。 如果这些依赖条件不满足, 则会自动设置IGNORE
。
12.14.2. 实现说明
这些字串不应使用引号括起来。 此外, 由于显示给用户的方式不同, 这些字串的措辞也应有所不同。 例如:
BROKEN= this port is unsupported on FreeBSD 5.x
IGNORE= is unsupported on FreeBSD 5.x
它们分别会在 make describe
时产生下面的输出:
===> foobar-0.1 is marked as broken: this port is unsupported on FreeBSD 5.x.
===> foobar-0.1 is unsupported on FreeBSD 5.x.
12.15. 使用 DEPRECATED
或 EXPIRATION_DATE
表示某个 port 将被删除
一定要记得 BROKEN
和 FORBIDDEN
只应作为当某个 port 无法正常工作时的临时解决方案。 永久性地坏掉了的 port 应被从 ports tree 中完全删除。
需要时还可以使用 DEPRECATED
和 EXPIRATION_DATE
来通知用户某个 port 不应被使用, 并即将被删除。 前一个变量用来表达为什么计划删除 port; 而后一个是则是一个 ISO 8601 格式的日期 (YYYY-MM-DD)。 两者都会向用户呈现。
也可以设置 DEPRECATED
而不给出 EXPIRATION_DATE
(例如, 建议使用某个新版本的 port), 但反之则没有意义。
目前还没有确切的关于需要给出多少通知的政策。 当前的实践是, 对于与安全有关的问题为一个月, 而与联编有关的问题则为两个月。 这也让有兴趣的 committer 能够有一点时间来修正问题。
12.16. 避免使用 .error
结构
在 Makefile
中给出信号, 表示由于某种外界因素 (例如, 用户指定了无效的联编选项) 而无法安装的方法是将变量 IGNORE
设为一非空值。 这个值将被格式化, 并在用户执行 make install
是给出提示。
用 .error
实现这一目的是一种常见的误用。 这样做的问题是, 许多在 ports 树上运行的自动化工具会因此而失败。 最常见的情况见于联编 /usr/ports/INDEX
的过程 (参见 第 9.1 节 “运行 make describe
”)。 然而, 即使十分普通的命令, 例如 make maintainer
, 在这种情况下也会失败。 这是不可接受的。
.error
考虑有人在 make.conf
中设置了
USE_POINTYHAT=yes
的情形。 接下来的例子中, 第一个 Makefile
中的问题将导致 make index
失败, 而第二个则不会:
.if USE_POINTYHAT .error "POINTYHAT is not supported" .endif
.if USE_POINTYHAT IGNORE=POINTYHAT is not supported .endif
12.17. 对于 sysctl
的使用
除了在 target 中之外, 是不鼓励使用 sysctl
的。 这是因为计算 makevar
, 例如在 make index
中所进行的那种, 都不得不运行一条命令, 这会使这一操作变得更慢。
在使用 sysctl(8) 时, 务必通过 SYSCTL
变量来进行, 因为此变量将展开成命令的完整路径, 并且用户可以根据需要另行指定。
12.18. 重新发布的 distfiles
有时, 一些软件的作者会修改业已发布的 distfile 的内容, 而并不修改文件名。 这种情况下, 您需要验证这些变动是来自软件作者的官方改动。 在过去, 曾经发生过下载服务器上的 distfile 被悄悄换成注入过恶意代码的版本, 并给用户安全造成威胁或损害的事情。
您应保留一份旧的 distfile, 并下载一份新的, 分别展开, 用 diff(1) 来对比其内容。 如果没有发现可疑的变动, 就可以更新 distinfo
了。 请务必在您的 PR 或 commit log 中对这些差异进行描述, 以便让别人了解您已经仔细对比过差异, 并确认没有问题了。
除此之外, 也可以联系软件的作者, 以确认这些修改是否是他们做的。
12.19. 杂记
需要仔细地反复检查 pkg-descr
和 pkg-plist
这两个文件。 如果您正在复审一个 port, 并认为这两个文件应该改进, 请一定要这样做。
请不要在系统中复制多份 GNU General Public License。
一定要非常小心地处理法律问题! 不要让我们发布没有得到合法授权的软件!