让FreeBSD6支持Nvidia nForce4 410主板

时间:2007-01-04 10:28:09   来源:  作者:whsong  点击:次  出处:技术无忧
关键字:让Fr

首先在这里说明,我在标题上说的“支持Nvidia nForce4 410主板”是指支持该主板上板载的网卡和声卡。

感谢iamqk在 http://bbs.chinaunix.net/viewthread.php?tid=718480 中给我的提示。

下边是我已经编译好的核心下dmesg的结果:

Copyright (c) 1992-2006 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD 6.1-PRERELEASE #0: Mon Mar 27 05:52:54 CST 2006
    root@:/usr/obj/usr/src/sys/FEELING
ACPI APIC Table: <Nvidia AWRDACPI>
Timecounter "i8254" frequency 1193182 Hz quality 0
CPU: AMD Sempron(tm) Processor 2500+ (1400.01-MHz K8-class CPU)
  Origin = "AuthenticAMD"  Id = 0x20fc2  Stepping = 2
  Features=0x78bfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,MMX,FXSR,SSE,SSE2>
  Features2=0x1<SSE3>
  AMD Features=0xe2500800<SYSCALL,NX,MMX+,<b25>,LM,3DNow+,3DNow>
real memory  = 1005518848 (958 MB)
avail memory = 962912256 (918 MB)
ioapic0 <Version 1.1> irqs 0-23 on motherboard
acpi0: <Nvidia AWRDACPI> on motherboard
acpi_bus_number: can't get _ADR
acpi_bus_number: can't get _ADR
acpi0: Power Button (fixed)
acpi_bus_number: can't get _ADR
acpi_bus_number: can't get _ADR
acpi_bus_number: can't get _ADR
acpi_bus_number: can't get _ADR
acpi0: reservation of 1bf00000, 100000 (3) failed
acpi0: reservation of 2bf00000, 100000 (3) failed
acpi0: reservation of 3bf00000, 100000 (3) failed
Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000
acpi_timer0: <24-bit timer at 3.579545MHz> port 0x1008-0x100b on acpi0
cpu0: <ACPI CPU> on acpi0
acpi_throttle0: <ACPI CPU Throttling> on cpu0
acpi_button0: <Power Button> on acpi0
acpi_button1: <Sleep Button> on acpi0
pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
pci0: <ACPI PCI bus> on pcib0
pci0: <memory, RAM> at device 0.0 (no driver attached)
pci0: <memory, RAM> at device 0.1 (no driver attached)
pci0: <memory, RAM> at device 0.2 (no driver attached)
pci0: <memory, RAM> at device 0.3 (no driver attached)
pci0: <memory, RAM> at device 0.4 (no driver attached)
pci0: <memory, RAM> at device 0.5 (no driver attached)
pci0: <memory, RAM> at device 0.6 (no driver attached)
pci0: <memory, RAM> at device 0.7 (no driver attached)
pcib1: <ACPI PCI-PCI bridge> at device 2.0 on pci0
pci1: <ACPI PCI bus> on pcib1
pcib2: <ACPI PCI-PCI bridge> at device 3.0 on pci0
pci2: <ACPI PCI bus> on pcib2
pcib3: <ACPI PCI-PCI bridge> at device 4.0 on pci0
pci3: <ACPI PCI bus> on pcib3
pci0: <display, VGA> at device 5.0 (no driver attached)
pci0: <memory, RAM> at device 9.0 (no driver attached)
isab0: <PCI-ISA bridge> at device 10.0 on pci0
isa0: <ISA bus> on isab0
pci0: <serial bus, SMBus> at device 10.1 (no driver attached)
pci0: <memory, RAM> at device 10.2 (no driver attached)
ohci0: <OHCI (generic) USB controller> mem 0xfe02f000-0xfe02ffff irq 21 at device 11.0 on pci0
ohci0: [GIANT-LOCKED]
usb0: OHCI version 1.0, legacy support
usb0: SMM does not respond, resetting
usb0: <OHCI (generic) USB controller> on ohci0
usb0: USB revision 1.0
uhub0: nVidia OHCI root hub, class 9/0, rev 1.00/1.00, addr 1
uhub0: 8 ports with 8 removable, self powered
ehci0: <EHCI (generic) USB 2.0 controller> mem 0xfe02e000-0xfe02e0ff irq 22 at device 11.1 on pci0
ehci0: [GIANT-LOCKED]
usb1: waiting for BIOS to give up control
usb1: timed out waiting for BIOS
usb1: EHCI version 1.0
usb1: companion controller, 8 ports each: usb0
usb1: <EHCI (generic) USB 2.0 controller> on ehci0
usb1: USB revision 2.0
uhub1: nVidia EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
uhub1: 8 ports with 8 removable, self powered
atapci0: <nVidia nForce MCP51 UDMA133 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xf400-0xf40f at device 13.0 on pci0
ata0: <ATA channel 0> on atapci0
ata1: <ATA channel 1> on atapci0
atapci1: <nVidia nForce MCP51 SATA300 controller> port 0x9f0-0x9f7,0xbf0-0xbf3,0x970-0x977,0xb70-0xb73,0xe000-0xe00f mem 0xfe02d000-0xfe02dfff irq 23 at device 14.0 on pci0
ata2: <ATA channel 0> on atapci1
ata3: <ATA channel 1> on atapci1
pcib4: <ACPI PCI-PCI bridge> at device 16.0 on pci0
pci4: <ACPI PCI bus> on pcib4
rl0: <RealTek 8139 10/100BaseTX> port 0xcc00-0xccff mem 0xfdbff000-0xfdbff0ff irq 18 at device 6.0 on pci4
miibus0: <MII bus> on rl0
rlphy0: <RealTek internal media interface> on miibus0
rlphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
rl0: Ethernet address: 00:e0:4c:f6:e5:c1
pcm0: <nVidia nForce4 410> port 0xdc00-0xdcff,0xd800-0xd8ff mem 0xfe02c000-0xfe02cfff irq 20 at device 16.2 on pci0
pcm0: <Avance Logic ALC655 AC97 Codec>
nve0: <NVIDIA nForce MCP12 Networking Adapter> port 0xd400-0xd407 mem 0xfe02b000-0xfe02bfff irq 21 at device 20.0 on pci0
nve0: Ethernet address 00:e0:4c:e4:30:fa
miibus1: <MII bus> on nve0
rlphy1: <RTL8201L 10/100 media interface> on miibus1
rlphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
nve0: Ethernet address: 00:e0:4c:e4:30:fa
acpi_tz0: <Thermal Zone> on acpi0
atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
atkbd0: <AT Keyboard> flags 0x1 irq 1 on atkbdc0
atkbd0: [GIANT-LOCKED]
psm0: <PS/2 Mouse> irq 12 on atkbdc0
psm0: [GIANT-LOCKED]
psm0: model IntelliMouse, device ID 3
sc0: <System console> at flags 0x100 on isa0
sc0: VGA <16 virtual consoles, flags=0x300>
vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
Timecounter "TSC" frequency 1400011646 Hz quality 800
Timecounters tick every 1.000 msec
ipfw2 (+ipv6) initialized, divert loadable, rule-based forwarding disabled, default to accept, logging limited to 100 packets/entry by default
ad0: 78533MB <IC35L080AVVA07 0 VA4OA52A> at ata0-master UDMA100
ad4: 76319MB <Seagate ST380817AS 3.42> at ata2-master SATA150
Trying to mount root from ufs:/dev/ad0s1a
rl0: link state changed to UP
里面我的声卡部分:
pcm0: <nVidia nForce4 410> port 0xdc00-0xdcff,0xd800-0xd8ff mem 0xfe02c000-0xfe02cfff irq 20 at device 16.2 on pci0
pcm0: <Avance Logic ALC655 AC97 Codec>

我的Nvidia板载网卡部分:
nve0: <NVIDIA nForce MCP12 Networking Adapter> port 0xd400-0xd407 mem 0xfe02b000-0xfe02bfff irq 21 at device 20.0 on pci0
nve0: Ethernet address 00:e0:4c:e4:30:fa
miibus1: <MII bus> on nve0
rlphy1: <RTL8201L 10/100 media interface> on miibus1
rlphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
nve0: Ethernet address: 00:e0:4c:e4:30:fa



然后来看看我的修改方法:
1. 先查看PCI信息: pciconf -lv,获得以下两条重要内容:

pcm0@pci0:16:2: class=0x040100 card=0x82131565 chip=0x026b10de rev=0xa2 hdr=0x00    vendor   = 'NVIDIA Corporation'
    class    = multimedia
    subclass = audio



nve0@pci0:20:0: class=0x068000 card=0x25011565 chip=0x026910de rev=0xa1 hdr=0x00    vendor   = 'NVIDIA Corporation'
    class    = bridge

从freebsd的hareware文档上看,Nvidia nForce 4集成声卡在 snd_ich 中,因此我首先去 /usr/src/sys/dev/sound/pci/ich.h 去看看,发现其中并没有和pciconf输出相关的内容。然后我又打开了 /usr/src/sys/dev/sound/pci/ich.c,呵呵,原来都藏在这里阿:

#define NVIDIA_NFORCE   0x01b1
#define NVIDIA_NFORCE2  0x006a
#define NVIDIA_NFORCE2_400      0x008a
#define NVIDIA_NFORCE3  0x00da
#define NVIDIA_NFORCE3_250      0x00ea
#define NVIDIA_NFORCE4  0x0059
#define AMD_768         0x7445
#define AMD_8111        0x746d

因此我将上述内容改为了

#define NVIDIA_NFORCE   0x01b1
#define NVIDIA_NFORCE2  0x006a
#define NVIDIA_NFORCE2_400      0x008a
#define NVIDIA_NFORCE3  0x00da
#define NVIDIA_NFORCE3_250      0x00ea
#define NVIDIA_NFORCE4  0x0059

#define NVIDIA_NFORCE4_410      0x026b
#define AMD_768         0x7445
#define AMD_8111        0x746d


接着理所当然地修改随后的

        { NVIDIA_VENDORID,      NVIDIA_NFORCE,  0,
                "nVidia nForce" },
        { NVIDIA_VENDORID,      NVIDIA_NFORCE2, 0,
                "nVidia nForce2" },
        { NVIDIA_VENDORID,      NVIDIA_NFORCE2_400,     0,
                "nVidia nForce2 400" },
        { NVIDIA_VENDORID,      NVIDIA_NFORCE3, 0,
                "nVidia nForce3" },
        { NVIDIA_VENDORID,      NVIDIA_NFORCE3_250,     0,
                "nVidia nForce3 250" },
        { NVIDIA_VENDORID,      NVIDIA_NFORCE4, 0,
                "nVidia nForce4" },
        { AMD_VENDORID,         AMD_768,        0,
                "AMD-768" },
        { AMD_VENDORID,         AMD_8111,       0,
                "AMD-8111" }



        { NVIDIA_VENDORID,      NVIDIA_NFORCE,  0,
                "nVidia nForce" },
        { NVIDIA_VENDORID,      NVIDIA_NFORCE2, 0,
                "nVidia nForce2" },
        { NVIDIA_VENDORID,      NVIDIA_NFORCE2_400,     0,
                "nVidia nForce2 400" },
        { NVIDIA_VENDORID,      NVIDIA_NFORCE3, 0,
                "nVidia nForce3" },
        { NVIDIA_VENDORID,      NVIDIA_NFORCE3_250,     0,
                "nVidia nForce3 250" },
        { NVIDIA_VENDORID,      NVIDIA_NFORCE4, 0,
                "nVidia nForce4" },
        
{ NVIDIA_VENDORID,      NVIDIA_NFORCE4_410, 0,
                "nVidia nForce4 410" },

        { AMD_VENDORID,         AMD_768,        0,
                "AMD-768" },
        { AMD_VENDORID,         AMD_8111,       0,
                "AMD-8111" }


这样就加入了 nForce4 410板载ALC655 AC97的识别。
Nvidia板载网卡需要修改两个文件,在该文(http://www.freebsdchina.org/forum/viewtopic.php?p=156165#156165) 中已经详细描述,我在这里就不再重复了。

接着修改kernel配置文件,加入以下行:

device sound
device snd_ich
device miibus
device nve
最后 cd /usr/src; make buildkernel && make installkernel 后重启就能够正常使用板载声卡和网卡了。

测试声卡工作的方法:
1. dmesg 查看是否有声卡信息
2. cat /dev/sndstat
3. cat 随便什么文件 > /dev/dsp  如果出现杂音则声卡已经正常工作

想自己动手组装电脑吗?想了解市场行情吗?来技术无忧DIY资讯一切烦脑都没有!


相关文章

    无相关信息

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面

300x250广告位招租