嵌入式快速入门学习笔记-第一个APP和驱动程序

it2023-09-26  81

第一个APP和驱动程序

前言第一个APP:Hello Word(1)代码编写(2)在Ubuntu下编译(3)拷贝到NFS目录(4)通过NFS下载到开发板上1)VMware NAT方式2)VMware桥接方式 (5)运行 第一个驱动程序:moudle_test1、运行在Ubuntu进行实验观察(1)代码编写(2)编译(3)安装、查看、卸载 2、运行在开发板进行实验观察(1)代码编写(2)下载内核和根文件系统到开发板,并下载 .ko 文件测试1)直接使用fastboot下载kernel和根文件系统,用NFS下载 .ko 文件到开发板测试编译kernel和根文件系统并下载编译module_test,将.ko放入NFS共享目录通过NFS传输 .ko 文件到开发板NAT模式桥接模式 安装、查看、卸载 2)使用TFTP挂载内核,使用NFS挂载根文件系统和驱动(需要完善)先设置IP地址配置TFTP配置NFS编译module_test,将.ko文件放入NFS共享目录安装、查看、卸载

前言

电脑环境和开发板环境都已经搭建完成,下面要做的就是运行第一个APP和驱动程序,达到嵌入式入门。

第一个APP:Hello Word

(1)代码编写

#include <stdio.h> int main(void) { printf("Welcome to Linux\n"); printf("Hello Word\n"); return 0; }

(2)在Ubuntu下编译

arm-linux-gnueabihf-gcc -o hello hello.c

(3)拷贝到NFS目录

cp hello /home/ww/nfs_rootfs

此处是将hello.c文件建立并编译在共享文件夹下

(4)通过NFS下载到开发板上

1)VMware NAT方式

假设Windows IP为192.168.1.100,在开发板上执行以下命令(注意:必须指定port为2049、 mountport为9999):

mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 192.168.1.100:/home/ww/nfs_rootfs /mnt cp /mnt/hello ./hello

2)VMware桥接方式

假设Ubuntu IP为192.168.10.128,在开发板上执行以下命令:

mount -t nfs -o nolock,vers=3 192.168.10.128:/home/ww/nfs_rootfs /mnt cp /mnt/hello ./hello

补充: mobaxterm软件在复制过长的命令行时,出现覆盖的情况解决方法: 在log显示窗口右键 -> change terminal settings… ->Implict LF in every CR

(5)运行

添加可执行权限

chmod +x hello

运行

./hello

第一个驱动程序:moudle_test

该实验参考朱有鹏老师的驱动开发

驱动开发得到的.ko文件必须与开发板上的内核同出一门,否则不能安装,出现报错信息:insmod:ERROR:coud not insert XXXX.ko:Invalid module format

1、运行在Ubuntu进行实验观察

(1)代码编写

module_test.c文件

#include <linux/module.h> #include <linux/init.h> // 模块安装函数 static int __init chrdev_init(void) { printk(KERN_INFO "chrdev_init helloword init\n"); return 0; } // 模块卸载函数 static void __exit chrdev_exit(void) { printk(KERN_INFO "chrdev_exit helloworld exit\n"); } module_init(chrdev_init); module_exit(chrdev_exit); // MODULE_xxx这种宏作用是用来添加模块描述信息 MODULE_LICENSE("GPL"); // 描述模块的许可证,这个许可证最好不要少,否则会出现莫名其妙的错误。 MODULE_AUTHOR("aston"); // 描述模块的作者 MODULE_DESCRIPTION("module test"); // 描述模块的介绍信息 MODULE_ALIAS("alias xxx"); // 描述模块的别名信息

Makefile文件

KERN_VER = $(shell uname -r) KERN_DIR = /lib/modules/$(KERN_VER)/build obj-m += module_test.o all: make -C $(KERN_DIR) M=`pwd` modules cp: cp *.ko /home/ww/nfs_rootfs .PHONY: clean clean: make -C $(KERN_DIR) M=`pwd` modules clean

(2)编译

进入到Makefile和module_test.c这两个文件的文件夹目录

cd /mnt/hgfs/share/x210v3/5.2.1 make all

(加图)

(3)安装、查看、卸载

查看驱动信息

modinfo module_test.ko

查看已安装的驱动

lsmod

安装 module_test 驱动

insmod module_test.ko

再次查看已安装驱动,观察 module_test 驱动是否安装

lsmod

卸载 module_test 驱动

rmmod module_test

再次查看已安装驱动,观察module_test 驱动是否卸载

lsmod

2、运行在开发板进行实验观察

因为该驱动是运行在开发板上,故要使用开发板上的内核进行驱动编译。之前使用BSP时,已经编译好kernel,因此只需将Makefile中内核的路径修改为

KERN_DIR = /x210v3_bsp/qt_x210v3/kernel

(1)代码编写

module_test.c文件不变和上面相同,只需要修改Makefile文件。

Makefile文件

KERN_VER = $(shell uname -r) #修改为开发板的linux内核的源码树目录 KERN_DIR = /x210v3_bsp/qt_x210v3/kernel obj-m += module_test.o all: make -C $(KERN_DIR) M=`pwd` modules cp: cp *.ko /home/ww/nfs_rootfs .PHONY: clean clean: make -C $(KERN_DIR) M=`pwd` modules clean

(2)下载内核和根文件系统到开发板,并下载 .ko 文件测试

1)直接使用fastboot下载kernel和根文件系统,用NFS下载 .ko 文件到开发板测试

编译kernel和根文件系统并下载

进入BSP路径下

cd /x210v3_bsp/qt_x210v3

生成zImage-qt

./mk -k

生成rootfs文件夹

./mk -r

生成ext3格式的rootfs镜像

./mk -re

使用fastboot指令将 zImage-qt 和 rootfs_qt4.ext3 下载到开发板上。

编译module_test,将.ko放入NFS共享目录

进入到Makefile和module_test.c这两个文件的文件夹目录

cd /mnt/hgfs/share/x210v3/5.2.1 make all make cp
通过NFS传输 .ko 文件到开发板
NAT模式

假设Windows IP为192.168.1.100,在开发板上执行以下命令(注意:必须指定port为2049、 mountport为9999):

mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 192.168.1.100:/home/ww/nfs_rootfs /mnt
桥接模式

假设Ubuntu IP为192.168.10.128,在开发板上执行以下命令:

mount -t nfs -o nolock,vers=3 192.168.10.128:/home/ww/nfs_rootfs /mnt
安装、查看、卸载

查看已安装的驱动

lsmod

安装 module_test 驱动

insmod module_test.ko

再次查看已安装驱动,观察 module_test 驱动是否安装

lsmod

卸载 module_test 驱动

rmmod module_test

再次查看已安装驱动,观察module_test 驱动是否卸载

lsmod

2)使用TFTP挂载内核,使用NFS挂载根文件系统和驱动(需要完善)

在uboot倒计时结束前,按回车键进入配置界面。

先设置IP地址
set serverip 192.168.1.141 set gatewayip 192.168.1.1 set netmask 255.255.255.0
配置TFTP

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

set bootcmd 'tftp 0x30008000 zImage;bootm 0x30008000'
配置NFS

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

setenv bootargs root=/dev/nfs nfsroot=192.168.1.141:/root/porting_x210/rootfs/rootfs ip=192.168.1.10:192.168.1.141:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC2,115200

在内核目录下进行NFS配置

make menueconfig

配置网络部分,主要是使能CONFIG_IP_PNP以在2中能够看到Root file system on NFS选项 Networking support Networking options TCP/IP networking IP: kernel level autoconfiguration [] IP: DHCP support [] IP: BOOTP support

配置开启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 distclean make x210ii_qt_defconfig make -j4
编译module_test,将.ko文件放入NFS共享目录

进入到Makefile和module_test.c这两个文件的文件夹目录

cd /mnt/hgfs/share/x210v3/5.2.1 make all make cp
安装、查看、卸载

查看已安装的驱动

lsmod

安装 module_test 驱动

insmod module_test.ko

再次查看已安装驱动,观察 module_test 驱动是否安装

lsmod

卸载 module_test 驱动

rmmod module_test

再次查看已安装驱动,观察module_test 驱动是否卸载

lsmod

最新回复(0)