当前位置: 首页 > news >正文

Linux驱动:基本环境准备

开发板调试模块

准备内核源码树

在这里插入图片描述
进行编译

make

在这里插入图片描述
查看信息

modifo module_test.ko

在这里插入图片描述

启动开发板的zImage

Windows使用USB接口,使用工具dnw刷机,写入的是uboot.bin文件,写到非易失性存储设备中,如 NAND 闪存、eMMC 等
Windows还可以使用工具x210_Fusing_Tool将uboot.bint写入SD卡
Linux可以使用dd命令(sb_fush.sh)将uboot.bin写入SD卡
当uboot启动后可以使用fastboot烧录镜像、tftp传输镜像、nfs挂载镜像
可以参考ARM裸机:刷系统

前提是开发板的Uboot先跑起来

在这里插入图片描述
查看ubuntu内核源码树目录

uname -r

在这里插入图片描述
调整模块配置代码,修改为自己编译的内核源码目录
在这里插入图片描述

ls:查看目录
make:编译
modinfo module_test.ko:查看编译后的模块信息
在这里插入图片描述
设备uboot起来后查看环境变量

ptint

在这里插入图片描述
配置IP信息

set garewayip 192.168.31.1
set serverip 192.168.31.70
set ipaddr 192.168.31.88
save 

记得保存!!!
在这里插入图片描述
查看Ubuntu上的tftp看这个tftp使用

设置bootcmd使开发板通过tftp下载自己建立的内核源码树编译得到的zImage

就是配置一句,很简单

set bootcmd 'tftp 0x30008000 zImage;bootm 0x30008000'

将ZImage放到ubuntu的tftp目录下
写自己的目录,自己编译源代码目录下的目录里面找

cp /home/aston/workspace/driver/kernel/arch/arm/boot/zImage ./

重启开发板

reset 

在这里插入图片描述
在这里插入图片描述
内核和自己编译的匹配

设置bootargs使开发板从nfs去挂载rootfs(内核配置记得打开使能nfs形式的rootfs)

支持看这里,如果不支持,下面有方法介绍
在这里插入图片描述

查看ubuntu的nfs目录是否可以使用,看这个linux 配置nfs

查看nfs目录

showmount localhost -e

在这里插入图片描述
设置bootargs

setenv bootargs root=/dev/nfs nfsroot=192.168.31.70:/home/aston/workspace/nfsdir ip=192.168.31.88:192.168.31.70:192.168.31.1:255.255.255.0::eth0:off  init=/linuxrc console=ttySAC2,115200 

在这里插入图片描述

Ubuntu和开发板网络连接

连接方式:通过网线将开发板和电脑连接
Ubuntu进入root超级用户模

su

配置

gedit /etc/network/interfaces
auto eth33
iface eth33 inet staticaddress 192.168.31.70netmask 255.255.255.0gateway 192.168.31.1dns-nameservers 8.8.8.8 8.8.4.4

设置虚拟机联网方式为桥接模式,并选择有线网卡。
在这里插入图片描述
重启网卡或者直接重启虚拟机

sudo /etc/init.d/networking restart

查看虚拟机的IP

ifconfig
ping 192.168.31.88

内核配置记得打开使能nfs形式的rootfs

make menuconfig

make[1]: *** [/home/aston/workspace/driver/kernel/scripts/kconfig/Makefile:208: scripts/kconfig/dochecklxdialog] Error 1 make: *** [Makefile:463: menuconfig] Error 2 root@ubuntu:/home/aston/workspace/driver/kernel# root@ubuntu:/home/aston/workspace/driver/kernel# make menuconfig *** Unable to find the ncurses libraries or the *** required header files. *** ‘make menuconfig’ requires the ncurses libraries. *** *** Install ncurses (ncurses-devel) and try again. *** make[1]: *** [/home/aston/workspace/driver/kernel/scripts/kconfig/Makefile:208: scripts/kconfig/dochecklxdialog] Error 1 make: *** [Makefile:463: menuconfig] Error 2
解决办法:安装ncurses库

sudo apt-get install build-essential 
sudo apt-get install libncursesw5-dev
sudo apt-get install ncurses
sudo apt-get install libncurses5-dev

注意网络连接!!!
再次执行

make menuconfig
1、配置网络部分,主要是使能CONFIG_IP_PNP以在2中能够看到Root file system on NFS选项
Networking support Networking options TCP/IP networkingIP: kernel level autoconfiguration[*] IP: DHCP support[*] IP: BOOTP support2、配置开启nfs服务
File systems  --->	Network File Systems  ---><*> NFS client support [*] NFS client support for NFS version 3                                  [*] NFS client support for the NFSv3 ACL protocol extension [*] NFS client support for NFS version 4 (EXPERIMENTAL) [*] NFS client support for NFSv4.1 (DEVELOPER ONLY) [*] Root file system on NFS  

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
按照顺序操作,不然最后一个没有!!!
在这里插入图片描述

重新make编译,将ZImage放到ubuntu的tftp目录下

出行错误:

[   75.682718] Root-NFS: Unable to get mountd port number from server, using default
[   75.690345] Root-NFS: Server returned error -101 while mounting /home/aston/workspace/nfsdir
[   75.698592] VFS: Unable to mount root fs via NFS, trying floppy.
[   75.704807] VFS: Cannot open root device "nfs" or unknown-block(2,0)

在这里插入图片描述

使用fastboot试试

参考这个ARM裸机:刷系统
在cmd下使用以下三个命令来完成烧录

fastboot flash bootloader u-boot.bin		烧uboot
fastboot flash kernel zImage		        烧linux kernel
fastboot flash system rootfs_qt4.ext3	    烧rootrs

在这里插入图片描述
要确认uboot环境变量

set bootcmd 'movi read kernel 30008000; bootm 30008000'
set bootargs console=ttySAC2,115200 root=/dev/mmcblk0p2 rw init=/linuxrc rootfstype=ext3

用户名:root
密码:123456

再次尝试挂载nfs

查看开发板IP

ifconfig

在这里插入图片描述
确定网络连接成功,填写自己nfs服务器的IP

ping 192.168.31.70
mkdir /mnt/nfs  # 创建挂载点  
mount -v -t nfs 192.168.x.x:/home/aa/workspace/nfsdir /mnt/nfs  # 替换为NFS服务器的IP地址和共享目录出现错误:```csharp
svc: failed to register lockdv1 RPC service (errno 111)

修改挂载语句:

mount -v -t nfs -o nolock 192.168.31.70:/home/aston/workspace/nfsdir /mnt
取消挂载
```csharp
umount /mnt/nfs

那现在将inand里面的内容进行破坏,重新按照前面的内容进行操作,检测是否是挂载语句的问题导致失败的

busybox dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=1 count=1 conv=sync

在这里插入图片描述
不插入SD卡,看到的提示
在这里插入图片描述
修改bootargs

setenv bootargs root=/dev/nfs nfsroot=192.168.31.70:/home/aston/workspace/nfsdir,nolock ip=192.168.31.88:192.168.31.70:192.168.31.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200

在这里插入图片描述
重启设备,还是错误,后面解决吧

VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or unknown-block(2,0)

先试用fastboot将自己编译内核放入设备当中,先调试起来

实验测试

挂载目录

mount -v -t nfs -o nolock 192.168.31.70:/home/aston/workspace/nfsdir /mnt

装载成功
在这里插入图片描述
使用dmesg 可以看到打印日志信息

复习打印级别

查看日志级别的设置

cat /proc/sys/kernel/printk

修改控制台日志级别

echo 5 > /proc/sys/kernel/printk

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
示例分析:7 4 1 7
控制台日志级别(第 1 个数字 7)
表示内核会将 级别 ≤ 7 的日志消息输出到控制台。由于 7 是最高级别(包含所有级别),因此 所有日志都会输出到控制台。
默认消息日志级别(第 2 个数字 4)
内核模块加载时若未指定日志级别,默认使用级别 4(KERN_WARNING),即只记录 警告及更严重的日志(级别 ≤ 4)。
最低控制台日志级别(第 3 个数字 1)
控制台日志级别的最小值为 1,意味着用户无法将控制台级别设置为 0(避免完全屏蔽紧急日志)。
默认控制台日志级别(第 4 个数字 7)
系统启动时,控制台日志级别初始化为 7,即默认输出所有日志。

若需永久生效,需修改内核配置文件(如 /etc/sysctl.conf),添加或修改以下行:
kernel.printk = 7 4 1 7 # 格式:四个数字用空格分隔
修改后执行 sysctl -p 使配置生效。

我将第一个数字修改为5 ,所有小于5的级别的日志都打印了。
在这里插入图片描述
先准备好环境,才能进程后面的内容,最最主要的就是需要自己拥有源代码的内核!!!

参考

https://blog.csdn.net/masudong/article/details/105077861
https://blog.csdn.net/yihui8/article/details/43702603

相关文章:

  • 【免费使用】剪Y专业版 8.1/CapCut 视频编辑处理,素材和滤镜
  • 基于CSP模型实现的游戏排行榜
  • AI大模型核心基础:向量与张量原理及实践应用指南
  • ARM笔记-嵌入式系统基础
  • 基于python的百度迁徙迁入、迁出数据分析(城市版)
  • 将ft2232外部的EEPROM中的信息读出来的方法,方便写入到下一个eeprom里面去;
  • Firecrawl MCP Server 深度使用指南
  • Linux系统基础——是什么、适用在哪里、如何选
  • NSSCTF-[羊城杯 2023]程序猿Quby
  • 建筑机械员(建筑施工机械管理人员)考试练习题
  • unordered_set与unordered_map实现详解剖析
  • 通过设备节点获取已注册的 i2c client
  • Vue3 Composition API: 企业级应用最佳实践方案
  • 什么是电离层闪烁
  • YOLOv8损失函数代码详解(示例展示数据变换过程)
  • 模型常见损失函数、softmax、交叉熵损失函数
  • python中的numpy(数组)
  • 2025.5个人感悟
  • leetcode hot100刷题日记——16.全排列
  • 水利水电安全员B证职责
  • 网站框架设计图/上海网上推广
  • 网页设计与制作做网站/关键词优化和seo
  • 做网站维护的人叫啥/网络营销与策划实践报告
  • 微信上浏览自己做的网站吗/市场营销毕业论文5000字
  • 只做正品的网站/广东seo网站推广
  • 福田做棋牌网站建设多少钱/最全的百度网盘搜索引擎