静态内核加载
1. 进入交叉编译内核目录
cd /home/uptech/fsl-6dl-source/kernel-4.9.88/drivers/char
2. 构建简单测试驱动
1 #include <linux/init.h>
2 #include <linux/module.h>
3 //声明GPL版权
4 MODULE_LICENSE("Dual BSD/GPL");
5 //驱动程序入口函数
6 static int mytest_init(void)
7 {
8 printk(KERN_ALERT "***********************Test, involute*************\n>
9 printk(KERN_ALERT "***********************Test, involute*************\n>
10 return 0;
11
12 }
13 //驱动程序退出函数
14 static void mytest_exit(void)
15 {
16 printk(KERN_ALERT "************************By, involute**************\n>
17
18 return 0;
19 }
20
21
22 module_init(mytest_init);
23 module_exit(mytest_exit);
3.修改当前目录下Kconfig 文件
在最后一行endmenu前面加入配置代码
config MYTEST_MODULE
tristate "Mytest"
help
This is involute Module On IMX6
注意:MYTEST_MODULE 前后均有空格,且采用TAB缩进
4. 修改当前目录下Makefile文件
在文件最后一行加入下列代码
Obj-$(CONFIG_MYTEST_MODULE) += mytest.o
5. 回退到kernel目录,配置内核对程序的支持
cd /home/uptech/fsl-6dl-source/kernel-4.9.88
make menuconfig
进入配置页面后,
Device Drivers —> 回车进入
Character devices —> 回车进入
[*]MyTest 空格选中


Exit 退出保存。
6. 重新编译内核
make
make imx6dl-sabresd.dtb
7. 烧录内核
编译完后会有 arch/arm/boot/zImage 和 arch/arm/boot/dts/imx6dl-sabresd.dtb
imx6dl-sabresd.dtb 重命名为 zImage-imx6dl-sabresd.dtb
将两个文件移动到 mfgtools 工具 mfgtools\Profiles\Linux\OS Firmware\files 目录下,
通过工具目录下 mfgtool2-yocto-mx6-sabresd-emmc-kernell.vbs 脚本打开程序。进行内核烧录。注意: 将IMX6 调至OTG模式
动态内核加载
在任意Linux 路径下。新建一文件夹,命名为 s_hello
还是采用之前的Mytest.c文件,
1. 编写Makefile文件
#指定驱动的测试的路径
ROOM_DIR = /imx7
#指定测试Demo的交叉编译工具链
#DEMO_DIR = /home/linux/1-DataShare/0.交叉编译工具链/0.exynos-4412/gcc-4.6.4/bi>
#GCC = $(DEMO_DIR)gcc
#GCC = $(CC)
#$(KERNELRELEASE)是内核Makefile里的一个变量,但我们没有定义这个变量
ifeq ($(KERNELRELEASE), )
#所以该Makefile第一执行的时候会执行这里,在这里首先指定内核路径和当前路径
KERNEL_DIR = /home/uptech/fsl-6dl-source/kernel-4.9.88
CUR_DIR = $(shell pwd)
#该目标为Makefile的第一个目标,所以也是默认目标
all:
#进入内核目录编译内核目录以外的一个目标,该目标通过M参数指定。此时内核目
make -C $(KERNEL_DIR) M=$(CUR_DIR) modules
#编译测试文件
#$(GCC) ./main.c -o main
#$(CC) ./main.c -o main
#清除掉所有的编译文件
clean:
make -C $(KERNEL_DIR) M=$(CUR_DIR) clean
#移动驱动和测试文件到板子上
install:
sudo cp -raf *.ko $(ROOM_DIR)
else
#当该Makefile被内核Makefiel调用的时候会执行这里,-m 表示编译成模块
obj-m += mytest.o
endif
ROOT_DIR 为 nfs共享文件夹。
KERNEL_DIR = /home/uptech/fsl-6dl-source/kernel-4.9.88 为交叉编译环境内核目录。
2. 编译
make all
3. 迁移到板子上
make install
4. 加载内核
更换到板子环境,
-
加载
在终端下输入如下命令:sudo insmod ./mytest.ko
查看加载的内容:sudo dmesg | tail -n 1 -
卸载
在终端下输入如下命令:sudo rmmod hello
查看卸载的内容:sudo dmesg | tail -n 1
模块卸载以后,使用 lsmod | grep mytest 命令查看模块列表,如果没有任何输出,表示mytest模块已被成功卸载。
1065

被折叠的 条评论
为什么被折叠?



