1——进入fedora
将官网上下载的linux2.6.9kernel压缩包拷贝到 /usr/src下面
2——解压kernel
3——命令make menuconfig 进行默认配置
4——出现如下错误
{standard input}: Assembler messages:
{standard input}:1340: Error: suffix or operands invalid for `mov'
{standard input}:1342: Error: suffix or operands invalid for `mov'
{standard input}:1673: Error: suffix or operands invalid for `mov'
{standard input}:1675: Error: suffix or operands invalid for `mov'
{standard input}:1779: Error: suffix or operands invalid for `mov'
{standard input}:1780: Error: suffix or operands invalid for `mov'
{standard input}:1962: Error: suffix or operands invalid for `mov'
{standard input}:1964: Error: suffix or operands invalid for `mov'
{standard input}:2092: Error: suffix or operands invalid for `mov'
{standard input}:2105: Error: suffix or operands invalid for `mov'
make[1]: *** [arch/i386/kernel/process.o] 错误 1
make: *** [arch/i386/kernel] 错误 2
是一个bug
可到网址http://www.kernel.org/pub/linux/devel/binutils/下载linux-2.6-seg-5.patch
安装补丁
[root@localhost linux-2.6.9]# patch -p1 < ../linux-2.6-seg-5.patch
patching file arch/i386/kernel/process.c
Hunk #1 succeeded at 574 (offset -23 lines).
patching file arch/i386/kernel/vm86.c
Hunk #1 succeeded at 300 (offset 6 lines).
patching file arch/x86_64/kernel/process.c
Hunk #1 succeeded at 370 (offset -21 lines).
Hunk #3 succeeded at 451 (offset -21 lines).
patching file include/asm-i386/system.h
5——继续make出现如下错误
In file included from drivers/i2c/algos/i2c-algo-bit.c:32:
include/linux/i2c.h:58: 错误:数组元素的类型不完全
include/linux/i2c.h:205: 错误:数组元素的类型不完全
drivers/i2c/algos/i2c-algo-bit.c: In function ‘sendbytes’:
drivers/i2c/algos/i2c-algo-bit.c:337: 警告:初始化指针时目标与指针有/无符号不一致
drivers/i2c/algos/i2c-algo-bit.c: In function ‘readbytes’:
drivers/i2c/algos/i2c-algo-bit.c:370: 警告:初始化指针时目标与指针有/无符号不一致
make[3]: *** [drivers/i2c/algos/i2c-algo-bit.o] 错误 1
make[2]: *** [drivers/i2c/algos] 错误 2
make[1]: *** [drivers/i2c] 错误 2
make: *** [drivers] 错误 2
将58行
extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[],int num);
改为
extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msg,int num);
将205行
int (*master_xfer)(struct i2c_adapter *adap,struct i2c_msg msgs[],
改为
int (*master_xfer)(struct i2c_adapter *adap,struct i2c_msg *msgs,
6——继续make出现如下错误
In file included from drivers/media/video/bttv-driver.c:40:
drivers/media/video/bttvp.h:254: 错误:数组元素的类型不完全
drivers/media/video/bttv-driver.c: In function ‘set_pll’:
drivers/media/video/bttv-driver.c:746: 警告:计算出的值未被使用
drivers/media/video/bttv-driver.c: In function ‘bttv_common_ioctls’:
drivers/media/video/bttv-driver.c:1676: 警告:传递参数 1 (属于 ‘sprintf’) 给指针时目标与指针有/无符号不一致
drivers/media/video/bttv-driver.c:1680: 警告:传递参数 1 (属于 ‘sprintf’) 给指针时目标与指针有/无符号不一致
drivers/media/video/bttv-driver.c:1682: 警告:传递参数 1 (属于 ‘sprintf’) 给指针时目标与指针有/无符号不一致
drivers/media/video/bttv-driver.c:1724: 警告:传递参数 1 (属于 ‘strcpy’) 给指针时目标与指针有/无符号不一致
drivers/media/video/bttv-driver.c: In function ‘bttv_do_ioctl’:
drivers/media/video/bttv-driver.c:2530: 警告:传递参数 1 (属于 ‘strcpy’) 给指针时目标与指针有/无符号不一致
drivers/media/video/bttv-driver.c:2531: 警告:传递参数 1 (属于 ‘strlcpy’) 给指针时目标与指针有/无符号不一致
drivers/media/video/bttv-driver.c:2532: 警告:传递参数 1 (属于 ‘sprintf’) 给指针时目标与指针有/无符号不一致
drivers/media/video/bttv-driver.c:2561: 警告:传递参数 1 (属于 ‘strcpy’) 给指针时目标与指针有/无符号不一致
drivers/media/video/bttv-driver.c:2590: 警告:传递参数 1 (属于 ‘strlcpy’) 给指针时目标与指针有/无符号不一致
make[3]: *** [drivers/media/video/bttv-driver.o] 错误 1
make[2]: *** [drivers/media/video] 错误 2
make[1]: *** [drivers/media] 错误 2
make: *** [drivers] 错误 2
用下面这个补丁
diff -u linux-2.6.12-mm1/drivers/media/video/bttvp.h linux/drivers/media/video/bttvp.h
--- linux-2.6.12-mm1/drivers/media/video/bttvp.h 2005-06-21 02:52:57.000000000 -0300
+++ linux/drivers/media/video/bttvp.h 2005-06-22 01:04:06.000000000 -0300
@@ -1,5 +1,5 @@
/*
- $Id: bttvp.h,v 1.17 2005/02/16 12:14:10 kraxel Exp $
+ $Id: bttvp.h,v 1.19 2005/06/16 21:38:45 nsh Exp $
bttv - Bt848 frame grabber driver
@@ -226,11 +226,6 @@
#define dprintk if (bttv_debug >= 1) printk
#define d2printk if (bttv_debug >= 2) printk
-/* our devices */
-#define BTTV_MAX 16
-extern unsigned int bttv_num;
-extern struct bttv bttvs[BTTV_MAX];
-
#define BTTV_MAX_FBUF 0x208000
#define VBIBUF_SIZE (2048*VBI_MAXLINES*2)
#define BTTV_TIMEOUT (HZ/2) /* 0.5 seconds */
@@ -331,6 +326,9 @@
int opt_vcr_hack;
int opt_whitecrush_upper;
int opt_whitecrush_lower;
+ int opt_uv_ratio;
+ int opt_full_luma_range;
+ int opt_coring;
/* radio data/state */
int has_radio;
@@ -377,6 +375,11 @@
struct bttv_fh init;
};
+/* our devices */
+#define BTTV_MAX 16
+extern unsigned int bttv_num;
+extern struct bttv bttvs[BTTV_MAX];
+
/* private ioctls */
#define BTTV_VERSION _IOR('v' , BASE_VIDIOCPRIVATE+6, int)
#define BTTV_VBISIZE _IOR('v' , BASE_VIDIOCPRIVATE+8, int)
diff -u linux-2.6.12-mm1/drivers/media/video/bttv-driver.c linux/drivers/media/video/bttv-driver.c
--- linux-2.6.12-mm1/drivers/media/video/bttv-driver.c 2005-06-21 02:52:57.000000000 -0300
+++ linux/drivers/media/video/bttv-driver.c 2005-06-22 01:04:06.000000000 -0300
7——继续make出现如下错误
drivers/net/hamradio/baycom_epp.c: In function ‘encode_hdlc’:
drivers/net/hamradio/baycom_epp.c:450: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:459: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:451: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:460: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:452: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:461: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:453: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:462: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:454: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:463: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:455: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:464: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:456: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:465: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:457: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:466: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:466: 警告:标号 ‘encodeend7’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:465: 警告:标号 ‘encodeend6’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:464: 警告:标号 ‘encodeend5’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:463: 警告:标号 ‘encodeend4’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:462: 警告:标号 ‘encodeend3’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:461: 警告:标号 ‘encodeend2’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:460: 警告:标号 ‘encodeend1’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:459: 警告:标号 ‘encodeend0’ 定义后未使用
drivers/net/hamradio/baycom_epp.c: In function ‘receive’:
drivers/net/hamradio/baycom_epp.c:692: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:701: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:701: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:701: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:692: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:701: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:693: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:702: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:702: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:702: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:693: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:702: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:694: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:703: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:703: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:703: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:694: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:703: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:695: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:704: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:704: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:704: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:695: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:704: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:696: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:705: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:705: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:705: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:696: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:705: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:697: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:706: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:706: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:706: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:697: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:706: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:698: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:707: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:707: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:707: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:698: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:707: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:699: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:708: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:708: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:708: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:699: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:708: 错误:跳转至语句表达式中
drivers/net/hamradio/baycom_epp.c:708: 警告:标号 ‘enditer7’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:707: 警告:标号 ‘enditer6’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:706: 警告:标号 ‘enditer5’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:705: 警告:标号 ‘enditer4’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:704: 警告:标号 ‘enditer3’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:703: 警告:标号 ‘enditer2’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:702: 警告:标号 ‘enditer1’ 定义后未使用
drivers/net/hamradio/baycom_epp.c:701: 警告:标号 ‘enditer0’ 定义后未使用
make[3]: *** [drivers/net/hamradio/baycom_epp.o] 错误 1
make[2]: *** [drivers/net/hamradio] 错误 2
make[1]: *** [drivers/net] 错误 2
make: *** [drivers] 错误 2
用下面这个补丁
--- linux-vanilla/drivers/net/hamradio/baycom_epp.c 2005-05-27 12:58:48.000000000 +0400
+++ linux-gcc4/drivers/net/hamradio/baycom_epp.c 2005-05-27 17:54:14.000000000 +0400
@@ -380,22 +380,18 @@ static inline void do_kiss_params(struct
*/
#define ENCODEITERA(j) /
-({ /
if (!(notbitstream & (0x1f0 << j))) /
goto stuff##j; /
- encodeend##j: ; /
-})
+ encodeend##j: ;
#define ENCODEITERB(j) /
-({ /
stuff##j: /
bitstream &= ~(0x100 << j); /
bitbuf = (bitbuf & (((2 << j) << numbit) - 1)) | /
((bitbuf & ~(((2 << j) << numbit) - 1)) << 1); /
numbit++; /
notbitstream = ~bitstream; /
- goto encodeend##j; /
-})
+ goto encodeend##j;
static void encode_hdlc(struct baycom_state *bc)
@@ -611,16 +607,13 @@ static void do_rxpacket(struct net_devic
}
#define DECODEITERA(j) /
-({ /
if (!(notbitstream & (0x0fc << j))) /* flag or abort */ /
goto flgabrt##j; /
if ((bitstream & (0x1f8 << j)) == (0xf8 << j)) /* stuffed bit */ /
goto stuff##j; /
- enditer##j: ; /
-})
+ enditer##j: ;
#define DECODEITERB(j) /
-({ /
flgabrt##j: /
if (!(notbitstream & (0x1fc << j))) { /* abort received */ /
state = 0; /
@@ -638,8 +631,7 @@ static void do_rxpacket(struct net_devic
stuff##j: /
numbits--; /
bitbuf = (bitbuf & ((~0xff) << j)) | ((bitbuf & ~((~0xff) << j)) << 1); /
- goto enditer##j; /
-})
+ goto enditer##j;
static int receive(struct net_device *dev, int cnt)
{
8——继续make出现如下错误
drivers/net/acenic.c: In function ‘acenic_probe_one’:
drivers/net/acenic.c:489: 错误:函数 ‘ace_watchdog’ 的存储类无效
drivers/net/acenic.c:490: 错误:‘ace_watchdog’ 未声明 (在此函数内第一次使用)
drivers/net/acenic.c:490: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
drivers/net/acenic.c:490: 错误:所在的函数内只报告一次。)
drivers/net/acenic.c: In function ‘ace_init’:
drivers/net/acenic.c:1325: 警告:传递参数 2 (属于 ‘writel’)时将整数赋给指针,未作类型转换
drivers/net/acenic.c: In function ‘ace_copy’:
drivers/net/acenic.c:2941: 警告:传递参数 2 (属于 ‘writel’)时将整数赋给指针,未作类型转换
drivers/net/acenic.c: In function ‘ace_clear’:
drivers/net/acenic.c:2968: 警告:传递参数 2 (属于 ‘writel’)时将整数赋给指针,未作类型转换
make[2]: *** [drivers/net/acenic.o] 错误 1
make[1]: *** [drivers/net] 错误 2
make: *** [drivers] 错误 2
用下面这个补丁
--- 25/drivers/net/acenic.c~gcc4-fixes Fri Dec 10 15:22:35 2004
+++ 25-akpm/drivers/net/acenic.c Fri Dec 10 15:22:35 2004
@@ -457,6 +457,8 @@ static struct ethtool_ops ace_ethtool_op
.get_drvinfo = ace_get_drvinfo,
};
+static void ace_watchdog(struct net_device *dev);
+
static int __devinit acenic_probe_one(struct pci_dev *pdev,
const struct pci_device_id *id)
{
@@ -485,7 +487,6 @@ static int __devinit acenic_probe_one(st
dev->vlan_rx_kill_vid = ace_vlan_rx_kill_vid;
#endif
if (1) {
- static void ace_watchdog(struct net_device *dev);
dev->tx_timeout = &ace_watchdog;
dev->watchdog_timeo = 5*HZ;
}
9——继续make出现如下错误
In file included from drivers/video/aty/atyfb_base.c:60:
include/linux/fb.h:751: 错误:数组元素的类型不完全
In file included from drivers/video/aty/atyfb_base.c:70:
drivers/video/aty/atyfb.h: In function ‘aty_ld_le32’:
drivers/video/aty/atyfb.h:136: 警告:传递参数 1 (属于 ‘readl’)时将整数赋给指针,未作类型转换
drivers/video/aty/atyfb.h: In function ‘aty_st_le32’:
drivers/video/aty/atyfb.h:150: 警告:传递参数 2 (属于 ‘writel’)时将整数赋给指针,未作类型转换
drivers/video/aty/atyfb.h: In function ‘aty_ld_8’:
drivers/video/aty/atyfb.h:162: 警告:传递参数 1 (属于 ‘readb’)时将整数赋给指针,未作类型转换
drivers/video/aty/atyfb.h: In function ‘aty_st_8’:
drivers/video/aty/atyfb.h:176: 警告:传递参数 2 (属于 ‘writeb’)时将整数赋给指针,未作类型转换
make[3]: *** [drivers/video/aty/atyfb_base.o] 错误 1
make[2]: *** [drivers/video/aty] 错误 2
make[1]: *** [drivers/video] 错误 2
make: *** [drivers] 错误 2
用下面这个补丁
===== include/linux/fb.h 1.94 vs edited =====
--- 1.94/include/linux/fb.h 2005-01-20 23:01:17 -06:00
+++ edited/include/linux/fb.h 2005-02-15 11:38:28 -06:00
@@ -862,7 +862,6 @@
/* drivers/video/modedb.c */
#define VESA_MODEDB_SIZE 34
-extern const struct fb_videomode vesa_modes[];
extern void fb_var_to_videomode(struct fb_videomode *mode,
struct fb_var_screeninfo *var);
extern void fb_videomode_to_var(struct fb_var_screeninfo *var,
@@ -906,6 +905,8 @@
u32 vmode;
u32 flag;
};
+
+extern const struct fb_videomode vesa_modes[];
struct fb_modelist {
struct list_head list;
-
10——然后make 就ok了
[root@localhost linux-2.6.9]# make
CHK include/linux/version.h
make[1]: “arch/i386/kernel/asm-offsets.s”是最新的。
CHK include/asm-i386/asm_offsets.h
CHK include/linux/compile.h
Kernel: arch/i386/boot/bzImage is ready
Building modules, stage 2.
MODPOST
11——然后make modules_install
成功
linux-2.6.9 kernel 内核成功编译
最新推荐文章于 2023-12-03 19:34:42 发布
