질문

질문

질문

CentOS 7에서 Broadcom 4352 무선 어댑터를 성공적으로 사용했습니다.CentOS wiki에서 Linux용 Broadcom STA 드라이버를 컴파일하는 방법에 대한 지침.

3.10.0-693(7.4인 것 같아요?)용 커널 업데이트가 나왔기 때문에 드라이버를 컴파일할 수는 있지만 작동하게 할 수는 없습니다. 설치 후 시스템이 정지됩니다.

[root]# depmod $(uname -r)
[root]# sudo modprobe wl
[root]#

그 후 몇 초 동안 마우스 입력이 작동한 후 모든 것이 멈췄습니다. 시계가 변경되지 않았고 시스템이 모든 종류의 입력 수신을 중단했으며 전원을 꺼야 했습니다.

wl.ko 파일은 여기에 있습니다:

$ ls -alZ /lib/modules/3.10.0-693.21.1.el7.x86_64/extra/wl.ko
-rw-r--r--. root root unconfined_u:object_r:modules_object_t:s0 /lib/modules/3.10.0-693.21.1.el7.x86_64/extra/wl.ko

재부팅해도 어댑터가 시작되지는 않지만 시스템이 정지되지는 않습니다. 마치 어댑터가 없는 것처럼 동작합니다. 그런 다음 터미널을 열고 modprobe wl명령을 실행하면 위에서 설명한 대로 정지됩니다.

무엇을 더 해야 할지 모르겠어서 다음과 같이 시도했습니다.

insmod /lib/modules/`uname -r`/extra/wl.ko

또한 시스템이 즉시 정지됩니다.

이러한 정지 이벤트에서는 아무 것도 볼 수 없습니다 /var/log/messages. 비록 제가 찾고 있는 것이 정확히 무엇인지는 모르지만 그 당시의 로그에는 거의 아무것도 없습니다.

비슷한 방식으로 설치된 드라이버를 사용하여 이전(3.10.0-514) 커널로 롤백하면 무선 네트워크를 사용할 수 있습니다. 하나 있다여기에 드라이버를 설치하려면 소스 RPM을 사용하세요., 그러나 저는 이 간단한 자체 컴파일 방법을 선호하며 이 방법을 디버깅하는 방법에 대한 몇 가지 팁을 원합니다.

비슷한 일을 해야 할까요 strace modprobe wl > /tmp/modprobe_log?


드라이버는 어떻게 설치하나요?

이것은 중복될 수 있지만 CentOS 위키 페이지의 지침이 감당할 수 없을 정도이므로(각 지점에 대해 별도의 섹션을 게시해야 하는 것 같습니다), 내가 하고 있는 일을 명확히 하고 다른 불행한 영혼들을 도울 수도 있습니다. , 7.4 커널에 대한 권장 사항은 다음과 같습니다.

yum install kernel-devel kernel-headers gcc
tar xzf hybrid-v35_64-nodebug-pcoem-6_30_223_271.tar.gz
patch -p1 < wl-kmod-fix-ioctl-handling.patch
patch -p1 < wl-kmod-kernel_4.7_IEEE80211_BAND_to_NL80211_BAND.patch
sed -i 's/ >= KERNEL_VERSION(3, 11, 0)/ >= KERNEL_VERSION(3, 10, 0)/' src/wl/sys/wl_cfg80211_hybrid.c
sed -i 's/ >= KERNEL_VERSION(3, 15, 0)/ >= KERNEL_VERSION(3, 10, 0)/' src/wl/sys/wl_cfg80211_hybrid.c
sed -i 's/ < KERNEL_VERSION(3, 18, 0)/ < KERNEL_VERSION(3, 9, 0)/' src/wl/sys/wl_cfg80211_hybrid.c
sed -i 's/ >= KERNEL_VERSION(4, 0, 0)/ >= KERNEL_VERSION(3, 10, 0)/' src/wl/sys/wl_cfg80211_hybrid.c
sed -i 's/ < KERNEL_VERSION(4,2,0)/ < KERNEL_VERSION(3, 9, 0)/' src/wl/sys/wl_cfg80211_hybrid.c
sed -i 's/ >= KERNEL_VERSION(4, 7, 0)/ >= KERNEL_VERSION(3, 10, 0)/' src/wl/sys/wl_cfg80211_hybrid.c
make -C /lib/modules/`uname -r`/build/ M=`pwd`
strip --strip-debug wl.ko
cp -vi wl.ko /lib/modules/`uname -r`/extra/

파일 만들기 /etc/modprobe.d/blacklist.conf:

blacklist bcm43xx
blacklist b43
blacklist b43legacy
blacklist bcma
blacklist brcmsmac
blacklist ssb
blacklist ndiswrapper

파일 만들기/etc/sysconfig/modules/kmod-wl.modules

#!/bin/bash
for M in lib80211 cfg80211 wl; do
    modprobe $M &>/dev/null
done

chown root:root /etc/sysconfig/modules/kmod-wl.modules
chmod 744 /etc/sysconfig/modules/kmod-wl.modules

아, Broadcom에서 STA 드라이버 위치를 변경한 것 같습니다. 몇년동안 업데이트가 안되어서 기존에 있던걸 사용했는데 생각보다여기서 다운로드 가능. 이 패치는 위에 링크된 CentOS 위키 페이지에서 다운로드할 수 있습니다.

패치 및 컴파일 출력을 살펴보면 다음과 같습니다.

$ patch -p1 < wl-kmod-fix-ioctl-handling.patch
patching file src/wl/sys/wl_cfg80211_hybrid.c
Hunk #1 succeeded at 1467 (offset 17 lines).
patching file src/wl/sys/wl_linux.c
Hunk #1 succeeded at 1659 (offset 8 lines).

$ patch -p1 < wl-kmod-kernel_4.7_IEEE80211_BAND_to_NL80211_BAND.patch
patching file src/wl/sys/wl_cfg80211_hybrid.c
Hunk #6 succeeded at 1911 (offset 3 lines).
Hunk #7 succeeded at 2040 (offset 3 lines).
Hunk #8 succeeded at 2160 (offset 3 lines).
Hunk #9 succeeded at 2298 (offset 3 lines).
Hunk #10 succeeded at 2941 (offset 3 lines).

<sed commands ran with no errors>

$ make -C /lib/modules/`uname -r`/build/ M=`pwd`
make: Entering directory `/usr/src/kernels/3.10.0-693.21.1.el7.x86_64'
CFG80211 API is prefered for this kernel version
Using CFG80211 API
  LD      /usr/local/src/hybrid-wl/built-in.o
  CC [M]  /usr/local/src/hybrid-wl/src/shared/linux_osl.o
  CC [M]  /usr/local/src/hybrid-wl/src/wl/sys/wl_linux.o
  CC [M]  /usr/local/src/hybrid-wl/src/wl/sys/wl_iw.o
  CC [M]  /usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.o
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1834:2: warning: initialization from incompatible pointer type [enabled by default]
  .get_station = wl_cfg80211_get_station,
  ^
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:1834:2: warning: (near initialization for ‘wl_cfg80211_ops.get_station’) [enabled by default]
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c: In function ‘wl_bss_connect_done’:
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:2446:3: warning: passing argument 2 of ‘cfg80211_scan_done’ makes pointer from integer without a cast [enabled by default]
   cfg80211_scan_done(wl->scan_request, true);
   ^
In file included from /usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:33:0:
include/net/cfg80211.h:4496:6: note: expected ‘struct cfg80211_scan_info *’ but argument is of type ‘int’
 void cfg80211_scan_done(struct cfg80211_scan_request *request,
      ^
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c: In function ‘wl_cfg80211_down’:
/usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:2976:3: warning: passing argument 2 of ‘cfg80211_scan_done’ makes pointer from integer without a cast [enabled by default]
   cfg80211_scan_done(wl->scan_request, true);
   ^
In file included from /usr/local/src/hybrid-wl/src/wl/sys/wl_cfg80211_hybrid.c:33:0:
include/net/cfg80211.h:4496:6: note: expected ‘struct cfg80211_scan_info *’ but argument is of type ‘int’
 void cfg80211_scan_done(struct cfg80211_scan_request *request,
      ^
  LD [M]  /usr/local/src/hybrid-wl/wl.o
  Building modules, stage 2.
CFG80211 API is prefered for this kernel version
Using CFG80211 API
  MODPOST 1 modules
  CC      /usr/local/src/hybrid-wl/wl.mod.o
  LD [M]  /usr/local/src/hybrid-wl/wl.ko
make: Leaving directory `/usr/src/kernels/3.10.0-693.21.1.el7.x86_64'

답변1

확실하지는 않지만 Red Hat은 릴리스 간에(다른 릴리스에서) 새 커널 버전에서 무언가를 변경할 수도 있습니다.

7.2에서 7.3으로 업데이트할 때 몇 가지 문제가 발생했습니다(커널 버전은 여전히 ​​하나이지만 버전이 다름): 당사에서 개발한 드라이버가 컴파일되지 않았습니다(API가 변경되었습니다). 나는 Red Hat bugzilla 추적기에 이에 대해 물었고 다음과 같은 답변을 얻었습니다.

"RedHat에서는 API가 아닌 ABI만 변경되지 않고 그대로 유지되도록 보장하기 때문에 centos도 마찬가지입니다. 자체 트리 외부 모듈을 컴파일하는 경우 커널의 모든 API 변경 사항을 따라잡아야 합니다. 또는 can tree 외부 코드는 업스트림 커널과 병합되며, API가 변경될 때마다 이 작업이 사용자를 대신하여 처리됩니다."

즉, 트리 외부 모듈이 새 커널 버전에 대해 컴파일되거나 작동하지 않으면 이는 클라이언트 작업입니다. 이 답변은 API에 관한 것이지만 다른 변경 사항은 누가 보장할 수 있는지 알고 있습니다.

일부 패치는 새로운 커널 버전에서 채택되지 않는 것 같습니다. 또는 이 질문을 게시할 수 있습니다.빨간 모자 버그질라추적 장치. (커널/모듈 질문의 경우) Red Hat 추적기로 리디렉션될 가능성이 높기 때문에 Centos 추적기에서 질문하는 것을 권장하지 않습니다.


소스 정보속도(RPM-s). 이는 환경을 깨끗하게 유지하는 데 더 선호되는 방법입니다. 또는 소스를 가져갈 수 있습니다.데이터 관리 시스템패키지를 사용하면 최신 버전의 커널용 새 모듈을 빌드할 수 없습니다.

답변2

이것들은 모두 심각한 버그가 있는 centos 커널 버전입니다. 3.10 정도라고 말하지만 때로는 4.15처럼 작동합니다.

나는 다음 위치에 저장소를 게시했습니다.https://github.com/rohitggarg/broadcom-staCentos 7.5 x64 시스템용 Wi-Fi 드라이버가 있습니다. 저는 노트북에서 사용하고 있어요.

관련 정보