驱动注册出现 /lib/modules/4.1.15 # insmod chardevbase.ko
[ 94.200118] chardevbase: version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ’ should be '4.1.15-g06f53e4 SMP preempt mod_unload modversions ARMv7 p2v8 ’
[ 94.216743] chardevbase: version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ’ should be '4.1.15-g06f53e4 SMP preempt mod_unload modversions ARMv7 p2v8 ’
insmod: can’t insert ‘chardevbase.ko’: invalid module format
magic版本不一致,
解决方法:尊重别人的博客
NFS挂载 串口打印信息提示 VFS: Unable to mount root fs via NFS, trying
floppy.或者或者报错 Loading:*ww ERROR:File lookup fail 的,或者 mount.nfs: mount system call
failed
可能就是 uboot 支持的协议与 NFS 支持的协议不同导致报错,
解决方法:
可以进行如下修改:
在 ubuntu 的/etc/default/nfs-kernel-server 文件中,按照如下图箭头所指的部分进行修改,改
完后保存退出,再执行指令 sudo service nfs-kernel-server restart 重启 NFS 服务。
Starting kernel …卡住
解决:查看启动内核和设备树文件是否放在自己要启动的位置,检查启动内核和设备树文件名词是否与环境变量设置的一致。
depmod: can’t change directory to ‘lib/modules/4.1.15-g52f6b26’: No such file or directory
解决方法:使用命令uname -r看内核版本是多少,如:
把文件夹名称改为:4.1.15-g52f6b26解决
驱动开发添加类和设备仍不能自己创建节点 file /dev/newled2 open failed!
解决:检查类和设备里注册的名称是什么 如:
class_create(THIS_MODULE, LED_NAME);
device_create(led_class, NULL, devid, NULL, LED_NAME);
这里注册的名称为LED_NAME(“led”),那么自动创建的节点名称就是led 打开驱动文件也应是/dev/led 而不是xxx.ko里的名称“xxx”。
**
make 错误:code model kernel does not support PIC mode scripts/Makefile.build:264: recipe for target ‘/home/jemee/linux/IMX6ULL/Linux_Drivers/9_semaphore/atomic.o’ failed
**
内核代码makefile里未指定编译器名称:
挂载驱动 提示Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = 884dc000
驱动框架挂载节点为空,一般是名字没有定义
隐式声明函数‘of_get_named_gpio’ [-Werror=implicit-function-declaration]
解决:函数没写对或者头文件没写
tftp Loading:T T T T T T T T
除了tftp没设置好,还可能是电脑window的ip和开发板ip冲突,或者tftp文件夹权限不够或者tftp文件夹在共享文件夹下
warning: ‘struct protocol’ declared inside parameter list will not be visible outside of this definition or declaration int db_broadcast(int connfd, struct protocol *msg);
题目中的警告是gcc产生的: 当函数参数中有stuct XXX类型, 且该类型的定义出现在参数声明的后面.
make install XXXXXX command not found
原因如下:
1.添加arm交叉编译器目录到PATH中是放在~/.bash_profile里的,这是用户的配置文件,用户为普通用户。
2.执行make install时,加了sudo前缀,变成了root的工作环境和root的权限。
根据以上两点,make install是在root下做的,而arm-linux-ranlib在wmm用户的工作环境中才能找到。所以产生了这里的错误。
那我既要取得root权限,又要具有当前用户的工作环境
解决如下:
执行make install之前,先用下su命令取得root权限。然后再执行make install。
su 和 sudo 的区别:
1.共同点:都是root用户的权限;
2.不同点:su仅仅取得root权限,工作环境不变,还是在切换之前用户的工作环境;sudo是完全取得root的权限和root的工作环境。
这里说一下 su -root和su root的区别:
su 后面不加用户是默认切到 root
su 是不改变当前变量
su - 是改变为切换到用户的变量
也就是说su只能获得root的执行权限,不能获得环境变量
而su -是切换到root并获得root的环境变量及执行权限
此时,已经可以进行root权限的操作了。