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

前言

电脑环境和开发板环境都已经搭建完成,下面要做的就是运行第一个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

(加图)

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页