phy_read
/include/linux/phy.h의 메서드는 32비트 값을 반환합니다. phy 드라이버는 이 방법을 사용하여 16비트 MII 레지스터를 읽습니다. phy_read
이 메서드는 32비트 값을 반환합니다. 32비트 필드에 16비트 값을 저장하면 0xFFFF가 0x0000FFFF가 되고, 16비트 필드에서는 -1(오류)로 처리되어 그런 식으로 처리되지만 32비트에 저장하면 큰 양수 값이 됩니다. , 오류가 아닙니다. 이로 인해 드라이버 실행 과정이 변경되고 바람직하지 않은 방식으로 링크 매개변수가 변경될 수 있습니다.
이 메서드를 관찰했는데 genphy_read_status
, 여기서 phy_read
is 및 int(4바이트)는 값을 반환하지만 관리 라인이 삭제되거나 일부 오류가 발생할 경우 0xFFFF가 포함됩니다. 반환 값은 4바이트이므로 0보다 작은지 확인하는 모든 검사는 실패합니다. 이 경우 링크 속도와 이중성은 그렇게 할 수 없더라도 가능한 최대 속도(예: 1000Mbps)로 변경됩니다.
그렇다면 phy 드라이버는 이 상황을 어떻게 처리합니까? 이와 같은 하드웨어 오류가 발생하면 링크가 이런 방식으로 구성을 변경하는 것이 정상입니까? 읽기 크기를 int에서 u16으로 변경하면 문제가 해결될 수 있는데 왜 안 될까요?
이러한 모든 문제는 Linux 커널 3.8.13에서 관찰되었습니다. 오류 조건을 테스트하지는 않았지만 최신 Linux 소스도 비슷한 것 같습니다.
16비트 phy 레지스터의 MII 레지스터 읽기 오류를 처리하는 방법은 무엇입니까?
관련 정보
- VGA 정보를 conky로 포맷
- Fedora가 시작될 때 화면 해상도를 어떻게 변경합니까?
- 프롬프트 없이 디렉토리에서 쓰기 가능한 파일만 삭제하려면 어떻게 해야 합니까?
- 파일에서 입력한 다른 명령에 대해 man 명령을 실행하고 싶습니다.
- 파일 권한 번호에 대한 매뉴얼 페이지가 있습니까?
- 기록에 추가하지 않고 쉘 명령을 실행하는 방법은 무엇입니까? [복사]
- 루트 없이 Kali Linux에 OpenVPN 키 추가
- "/var/cache/cups/jobs.cache의 X행에 값이 누락되었습니다"는 무엇을 의미합니까?
- 로그인 페이지에서 ASUS Vivobook S15 S532F ScreenPad 비활성화
- 터미널을 통해 애플리케이션 설치