解决Buildroot 启动找不到console (can‘t open /dev/console: No such file or directory)
使用Buildroot构建好了根文件系统,启动时报如下错误:
hub 1-1:1.0: USB hub found
hub 1-1:1.0: 4 ports detected
devpts: called with bogus options
can't open /dev/null: No such file or directory
can't open /dev/null: No such file or directory
can't open /dev/null: No such file or directory
can't open /dev/null: No such file or directory
Starting syslogd: OK
Starting klogd: OK
Running sysctl: usb 1-1.2: new high-speed USB device number 3 using hiusb-ehci
OK
Starting network: OK
can't open /dev/console: No such file or directory
can't open /dev/console: No such file or directory
can't open /dev/console: No such file or directory
can't open /dev/console: No such file or directory
can't open /dev/console: No such file or directory
首先尝试在主机上的设备跟文件系统上创建这个设备,另外把串口设备也创建好。
cd output/target/dev
sudo mknod console c 5 1
sudo mknod ttyAMA0 c 204 64
uboot下面我设置bootarg是'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)'
。
这里生成节点的参数在system/device_table_dev.txt
文件中可以找到对应的,console节点是5 1
,ttyAMA是204 64
,使用上面的命令设对应的主次设备节点号在output/target/dev
目录下生成设备节点即可。
使用hisi的板子的串口名称是ttyAMA0
,nxp imx6ull的串口名称是ttymxc0
。
生成完毕后,同样根据上面的表,赋予对应的权限。
sudo chmod 666 console
sudo chmod 666 ttyAMA0
完成后,重新烧录根文件系统,发生已经能够进入终端了,也不会再报错。
进入系统后,发现/dev
目录下基本没有设备,说明mdev没有生效,因此通过下面的方式,解决这个mdev不生效的问题。
1. 启用mdev
需要在Buildroot下勾选使用mdev,mdev会自动扫描/sys
和/proc
虚拟文件系统的设备节点,在/dev
下生成设备。
另外busybox中也需要配置mdev,buildroot中的busybox默认是配置好了mdev的,因此不需要再修改了。
2. 配置文件
对比另外板子正常启动的根文件系统,发现hisi板子的/etc/init.d/
目录少了一个启动脚本,正好是配置mdev的——S10mdev。不知道为什么创建根文件系统时,这个脚本没有被放到根文件系统中。这里直接手动将该脚本放到根文件系统中。
sudo cp package/busybox/S10mdev output/target/etc/init.d/
然后重新编译打包根文件系统即可。
启动时,可以看到改脚本已经运行了。
然后查看/dev
目录,设备数量也已经正常了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗