Linux 与 IMX6 动态与静态 内核加载

静态内核加载

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/zImagearch/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模块已被成功卸载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

involute__

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

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

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

打赏作者

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

抵扣说明:

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

余额充值