Lenovo ideapad-330C Ubuntu 18.04에 Realtek 8821CE 무선 카드 드라이브 설치
참조 링크: Thinkpad E470C(내장형 NIC rlt8111/8618/8411 시리즈) 무선 NIC rtl8821CE 시리즈 설치 ubuntu와 win10 쌍 시스템에 무선 네트워크 문제가 없음(삭제)
상기 링크에서 해결 방안과 무선랜카드 rtl8821ce 원본 압축 패키지의 다운로드 주소를 제시하였으며, 필요한 경우 스스로 다운로드하십시오.
시스템: Ubuntu 18.04.2
커널:linux4.18
NIC: Realtek 8821CE Wireless LAN 802.11ac PCI-E NIC
참고 링크 방법에 따라 네트워크 카드 드라이브를 성공적으로 설치하여 이 컴퓨터에서 다시 시작하지 않아도 와이파이를 연결할 수 있었으나 나중에 시스템이 업데이트되었다...Ubuntu18.04.3, 커널이 linux 5로 업데이트되었습니다.0.0.31에서 재부팅 후 무선 카드 드라이버가 없음
현재 시스템: Ubuntu 18.04.3
커널:linux 5.0.0.31
어쩔 수 없이 원래의 방법에 따라 다시 한 번 했는데, 컴파일링이 잘못되었음을 발견했고, 설정이 바뀌지 않았으며,make는 다음과 같은 오류가 발생했다
rtl8821ce/os_dep/linux/os_intfs.c:1325:22: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
.ndo_select_queue = rtw_select_queue,
이 오류를 보니 무슨 일이 일어났는지 모르겠다. 인터넷에서 찾아볼 수밖에 없다. 어떤 사람이 유형이 일치하지 않는다고 해서 내부 원본 코드에서 ndo 를 찾았다select_queue의 성명, 찾았습니다. 그렇습니다.
u16 (*ndo_select_queue)(struct net_device *dev,
struct sk_buff *skb,
struct net_device *sb_dev,
select_queue_fallback_t fallback);
네트워크 카드의 코드 rtl8821ce/osdep/linux/os_intfs.c:1192는 이렇습니다.
static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
, void *accel_priv
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)
, select_queue_fallback_t fallback
#endif
#endif
이렇게 하면 네트워크 카드가 구동하는 원본 코드만 수정할 수 있습니다. 적당한 linux5로 변경합니다.0 이상 핵의 경우 다음 코드로 변경하고 핵에 대한 linux5를 추가합니다.0.0이상의 판단
static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)
, struct net_device *sb_dev
, select_queue_fallback_t fallback
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0)
, void *accel_priv
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 14, 0)
, select_queue_fallback_t fallback
#endif
#endif
저장으로 변경, 계속make, 오류 보고
rtl8821ce/os_dep/linux/rtw_android.c:629:62: error: macro "access_ok" passed 3 arguments, but takes just 2
if (!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)) {
^
rtl8821ce/os_dep/linux/rtw_android.c:629:7: error: ‘access_ok’ undeclared (first use in this function)
if (!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)) {
방법은 동일합니다. 계속accessok 커널 헤더 파일의 성명은 linux 5에서 발견되었습니다.0 이상accessok의 매개 변수는 2개이고 네트워크 카드 드라이브에 사용할 때 3개의 매개 변수가 있습니다
NIC 드라이버 소스 수동 수정, 파일: rtl8821ce/osdep/linux/rtw_android.c:629, 수정 후 다음과 같습니다: (원래 if(!access ok(VERIFY READ, priv cmd.buf, priv cmd.total len) {이 줄 코드 삭제, 아래 코드 추가)
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)
if (!access_ok(priv_cmd.buf, priv_cmd.total_len)) {
#else
if (!access_ok(VERIFY_READ, priv_cmd.buf, priv_cmd.total_len)) {
#endif
저장, 계속make, 그리고 오류 보고:
rtl8821ce/os_dep/linux/ioctl_cfg80211.c: In function ‘rtw_get_systime_us’:
rtl8821ce/os_dep/linux/ioctl_cfg80211.c:339:2: error: implicit declaration of function ‘get_monotonic_boottime’; did you mean ‘getboottime’? [-Werror=implicit-function-declaration]
get_monotonic_boottime(&ts);
^~~~~~~~~~~~~~~~~~~~~~
getboottime
여기는 이미 수정된 힌트를 주었지만, 같은 방법으로는 get 를 찾을 수 없습니다monotonic_boottime 이 함수, 힌트를 찾을 수 있는 getboottime 함수는 다음과 같습니다. 단, 내부 핵이 5.0보다 낮은 버전을 고려하면 판단을 추가합니다.
rtl8821ce/os 삭제dep/linux/ioctl_cfg80211.c:339 이 줄 코드, 다음 코드 추가
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0)
getboottime(&ts);
#else
get_monotonic_boottime(&ts);
#endif
이번 make 드디어 성공했어!
make
sudo make install
sudo modprobe -a 8821ce
이 컴퓨터는 재부팅하지 않고 바로 원래의 와이파이와 연결된다
며칠 지나지 않아 컴퓨터가 또 업데이트되었는데, 재부팅한 후에 또 무선랜카드 구동이 없는 것을 발견하였다. 한번 보았는데, 원래 내부 핵이 또 업그레이드되었는데, 이번에는 다음과 같다.
시스템: Ubuntu 18.04.3
커널: Linux 5.0.0.32
내부 핵의 작은 변동이 모두 원래의 네트워크 카드 구동을 없앴다. 다행히 지난번의 네트워크 카드 구동 원본 코드의 변동은 아직 남아 있다. 아래의 조작을 반복한다.
make
sudo make install
sudo modprobe -a 8821ce
하하, 또 됐다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.