우분투 16.04.1을 실행하는 qemu VM에서 네트워크 드라이버를 실험하고 있습니다. uname -r
은 커널 버전으로 4.4.0-31-generic을 제공합니다. 내 코드에서,netdev_ops 함수 포인터에 드라이버 기능을 할당 할 때 "읽기 전용"오류가 발생했습니다.
그러나 과제를 "콜백 몇 가지 포인터를 포함, 하나는 NDO _ *() 함수를 오버라이드 (override)하고자하는 경우 @netdev_ops"
는 linux/netdevice.h for that kernel version, 나는 코멘트
발견
assignment of member 'ndo_open' in read-only object
또한,(netmod_open 내 자신의 드라이버의 공개 방법) dev->netdev_ops->ndo_open = netmod_open
컴파일러 오류를 제공 등
const struct net_device_ops *netdev_ops;
가 어떻게 자신의 포인터를 포함하는 구조체 const
경우 "를 NDO _ *() 함수를 오버라이드 (override)"을 할 수 있습니다 :소스에 const
로 선언?
내 자신의'struct net_device_ops'를 만들고'dev-> netdev_ops'에'struct'의 주소를 할당해야합니다. 따라서 일반적으로 커널에서 데이터 구조가 전달되는 방식에 대해 더 자세히 알아야합니다. 그러한 정보에 대한 링크는 인정 될 것입니다. 대부분의 튜토리얼에서 오래된 커널 API가있는 것처럼 보입니다. – Vale132