Linux驱动开发前期准备

Linux驱动开发前期准备

本文主要是记录下再驱动开发前期遇到的一些问题,如有错误或建议欢迎指出。

平台:正点原子的阿尔法卡发板(256+nand),Ubuntu20.04

Uboot

正常编译

​ 首先需要编译uboot的源码,这用了正点原子提供的uboot源码(uboot-imx-2016.03-2.1.0-g0ae7e33-v1.7.tar.bz2。)

​ 在uboot下编写shell脚本,方便我们去编译uboot源码。

  #!/bin/bash
  make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
  make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr256_nand_sd_defconfig
  make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j16

uboot-编译结果

uboot无法启动

然后把uboot.bin烧写到SD卡,插上板子启动,但发现一直无法启动,后来发现是自己的交叉编译工具选错了,需要修改下交叉编译链。

​ sudo vi /etc/profile
​ vi ~/.bashrc

​ 分别在末尾添加上自己的交叉工具链,然后注释掉原来别的交叉编译链
​ export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

最后验证下交叉编译工具是否正确,有可能需要重启下Ubuntu,才可能生效

​ source ~/.bashrc
​ which arm-linux-gnueabihf-gcc

交叉编译验证

​ 接着在再次编译,用imxdownload把uboot.bin下载到sd卡,也可以用命令下载到SD卡

​ sudo dd if=u-boot.bin of=/dev/sdb bs=1024 seek=1 conv=fsync

​ 最后uboot成功点亮
uboot启动画面

uboot环境变量

​ 然后需要设置下几个uboot的环境变量,这部分可以参考正点原子的【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.71,主要是配置网络,ubootcmd,bootargs。下面的我的配置。

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=nfs网络文件系统的路径,v3,nfsvers=3 proto=tcp rw ip=板子的ip:Ubuntu的ip:网关的ip:子网掩码::eth0:off'

setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-nand.dtb; bootz 80800000 - 83000000'

#这里v3,nfsvers=3是未来让uboot启动内核时,可以用NFS3的版本挂载Rootfs
#在uboot用nfs去下载zImage时会出错,提示Loading: *** ERROR: File lookup fail,不过不影响可以用tftp去下载zImage和dtb
#https://blog.csdn.net/polaris_zgx/article/details/103571725(我仍然无法解决NFS问题)

Kernal

正常编译

​ 内核源码的编译,与uboot类似,编写脚本,进行配置,把编译出来的镜像拷贝到tftpboot目录下

#!/bin/bash
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- all -j16

在这里插入图片描述

主要的两个问题

VFS: Unable to mount root fs on unknown-block(2,0)

​ 内核的编译基本也是跟着正点原子的来的,但是要注意的地方是,在编译内核时,要取消NFS2的启用,否则ubuntu20.04的NFS V2无法被挂载rootfs,会提示这个问题。

[   11.254132]   #0: wm8960-audio
[  106.409572] VFS: Unable to mount root fs via NFS, trying floppy.
[  106.416312] VFS: Cannot open root device "nfs" or unknown-block(2,0): error -6
[  106.423662] Please append a correct "root=" boot option; here are the available partitions:
...
[  106.512338] b300        62367744 mmcblk0  driver: mmcblk
[  106.517696]   b301        62351360 mmcblk0p1 00000000-01
[  106.523031] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
[  106.531307] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
[  110.393264] random: nonblocking pool is initialized

VFS: Cannot open root device “nfs” or unknown-block(0,255)错误解决_Overboom的博客-CSDN博客

参考上面的链接,把NFS version 2 取消编译,然后把

arch/arm/boot/zImage和arch/arm/boot/dts/imx6ull-alientek-nand.dtb拷贝到tftpboot的目录下

重启设备就可以正常进入linux的控制台了

make: *** [Makefile:947:fs]

第二个问题就是编译kernal的时候出现下面的问题,导致无法编译出zImage和dtb

LD fs/ext4/ext4.o
LD fs/ext4/built-in.o
make: *** [Makefile:947:fs] 错误 2
LD arch/arm/mach-imx/devices/built-in.o
LD arch/arm/mach-imx/built-in.o
LD mm/built-in.o

NFS错误

NFS version 2
kernal正常启动

​ 原因还是更uboot交叉编译类似的问题,换回正确的编译器后,可以正常编译,板子启动后也不会有一些却莫名其妙的问题了

Rootfs

​ 跟文件系统按着正点原子的文档来,基本不会出现什么问体,但是因为我是跳着来的,导致在进入系统后,板子上有些命令无法,像smod,cat ,kill ,pid等一些命令。
​ 正常来说,这些应该已经被编译进去了, 我们需要完善下rootfs,添加一些启动的相关代码,上面的问题基本解决了

参考链接

字符设备驱动编译出现error:code model kernel does not support PIC mode-OpenEdv-开源电子网

Linux通过nfs挂载根文件系统失败:VFS: Unable to mount root fs via NFS, trying floppy._make-n的博客-CSDN博客_nfs挂载根文件系统失败

VFS: Cannot open root device “nfs” or unknown-block(0,255)错误解决_Overboom的博客-CSDN博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 对于Linux底层驱动面试,以下是我个人的回答: 首先,Linux底层驱动是指与硬件设备交互的一组软件组件。它们允许操作系统与硬件之间的通信和交互。在Linux系统中,驱动程序通常作为内核模块加载到内核中,以支持设备的正常运行。 在面试中,考官可能会关注以下几个方面: 1. 驱动程序的开发 - 面试官可能会问您有关驱动程序开发的经验和技能。他们可能会要求您解释您在开发过程中使用的工具、技术和流程,并问您如何处理常见的驱动程序开发问题。 2. 设备和驱动程序的关系 - 面试官可能会问您对设备和驱动程序之间关系的理解。您需要解释设备如何与驱动程序进行通信以及操作系统如何使用驱动程序来访问设备的功能。 3. 内核模块的加载和卸载 - 面试官可能会问您有关内核模块加载和卸载的知识。您需要解释如何在Linux系统中加载和卸载驱动程序,并讨论在加载和卸载过程中可能遇到的问题和解决方法。 4. 设备树(DTS) - Linux系统中的设备树是描述硬件设备的数据结构。面试官可能会问您对设备树的理解以及如何在驱动程序中使用设备树来配置硬件设备。 5. 调试和故障排除 - 面试官可能会问您关于驱动程序调试和故障排除的问题。您需要解释您在调试和故障排除过程中使用的工具和技术,并描述一些常见的驱动程序问题及其解决方法。 总的来说,面试官希望了解您在Linux底层驱动开发方面的知识和经验。除了理论知识,他们可能还会考察您的实际操作和解决问题的能力。因此,在面试前应该准备并熟悉相关概念和技术,同时也要对常见的驱动程序开发问题进行思考和准备。 ### 回答2: Linux底层驱动面试涉及到Linux内核,对于驱动程序开发有一定的要求。以下是对Linux底层驱动面试的回答: 首先,Linux底层驱动面试通常会要求面试者对Linux内核的工作原理和架构有一定的了解。面试官可能会问及Linux内核的组成、内存管理、进程调度、文件系统等方面的问题,以检验面试者对于Linux内核的掌握程度。 其次,面试者应具备C语言编程技能和驱动开发经验。面试官可能会询问面试者在驱动开发方面的项目经历,对于驱动程序的编写、调试和优化等方面的经验和能力。 另外,面试者还需要了解Linux设备模型和驱动框架。Linux设备模型包括字符设备、块设备、网络设备等,面试者需要了解设备的注册、初始化、IO操作等流程。面试者还需要了解Linux驱动框架,如Platform驱动、PCI驱动、USB驱动等,面试者需要知道如何编写针对特定设备的驱动程序,并能够解释驱动程序的加载、绑定和解绑过程。 最后,面试者应具备问题解决能力和团队合作精神。Linux底层驱动开发涉及到复杂的问题和困难的调试过程,面试者需要展示自己解决问题的能力,并能够与团队合作进行系统的调试与优化。 综上所述,Linux底层驱动面试需要具备对Linux内核的深入理解、熟练的C语言编程和驱动开发经验、对Linux设备模型和驱动框架的熟悉,以及问题解决能力和团队合作精神。希望以上回答对您有所帮助。 ### 回答3: Linux底层驱动面试主要聚焦于以下几个方面: 首先,需要掌握Linux操作系统的基本原理和体系结构。这包括Linux内核的基本组成、内核模块以及驱动的加载和卸载机制等。熟悉Linux系统的启动流程以及内核的初始化过程也是必备的知识。 其次,熟悉Linux设备驱动的框架和模型。Linux的设备驱动模型将驱动程序分为字符设备、块设备和网络设备等类型,并提供了相应的框架和接口。面试中需要解释和展示对这些框架和接口的理解和使用经验。 接下来,需要了解如何编写和调试Linux驱动程序。这包括如何使用标准的Linux API来开发设备驱动、如何调试和优化驱动程序以及如何处理常见的错误和异常情况等。面试官可能会要求候选人描述自己的开发经验和解决问题的能力。 此外,对于特定设备的驱动开发经验也是面试中的加分项。例如,有经验开发网络驱动、存储设备驱动或声卡驱动等的候选人会更受面试官的关注。在回答问题时,可以结合自身的经验和项目来具体说明自己的能力和技术深度。 最后,沟通能力和团队合作精神也是Linux底层驱动面试中需要考察的因素。Linux驱动开发往往需要与硬件工程师、内核开发者和应用程序开发者进行密切合作。面试官可能会通过场景题或者工作经验来考察候选人的沟通和协作能力。 综上所述,Linux底层驱动面试需要候选人掌握Linux操作系统的基本原理和体系结构、熟悉设备驱动模型和编写调试驱动程序的方法、具备特定设备驱动开发经验、具备良好的沟通和团队合作能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_44637112

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值