1、遇到权限问题:insmod: cannot insert 'learn_pwm.ko': Operation not permitted
解决方法:这次遇到这个问题是因为在模块入口函数里面出现问题后,没有及时清掉已经获得的内容。
教训:在驱动的入口模块函数里面,要注意内容申请的顺序,在判断错误的地方按顺序移除已经分配的内容,alloc_chrdev_region函数在入口函数和出口函数中都应该是最后一个运行的。
2、遇到的问题:对于一些函数的返回值不明确,导致错误判断,从而导致正确的程序运行错误
解决方法:查看函数的原型,在sourceInsight中可以ctrl+鼠标单击目标函数,获得原型函数说明。
教训:要对函数返回值有确定的判断,不能猜测。
3、遇到的问题:卸载驱动出错
解决方法:申请到的pwm结构体不需要在卸载函数中释放
教训:不是所有的内容都要在卸载(出口)函数中释放,在其它地方也可以释放,比如关闭函数,可以用于释放pwm。