网站开发的学习方法,百度怎么把自己网站展现在百度,18年手机网站,郑州市住房和城乡建设厅网站内核模块
宏内核微内核
微内核就是内核中的一部分功能放到应用层
内核小#xff0c;精简#xff0c;可扩展性好#xff0c;安全性好
相互之间通信损耗多
内核模块
Linux是宏内核操作系统的典型代表#xff0c;所有内核功能都整体编译到一起#xff0c;优点是效…内核模块
宏内核微内核
微内核就是内核中的一部分功能放到应用层
内核小精简可扩展性好安全性好
相互之间通信损耗多
内核模块
Linux是宏内核操作系统的典型代表所有内核功能都整体编译到一起优点是效率高缺点修改一下很麻烦。所以引入内核模块。
灵活缩短模块的开发周期因为模块的安装和卸载都很方便。编译成模块.ko放在应用层用的时候插入内核不要的时候卸载。更新不用重新修改编译内核源码。节省空间通用的功能放进内核多出来的不同版本的特定功能就可以放进内核模块不用的可以不编译。也可以用设备树安全性好模块有问题不会影响内核其他部分。应用程序在退出时可以不管资源的释放或者其他的清除工作而把这些任务交给模块退出函数(exit)。
NFS挂载调试内核模块
bootargs启动参数设置 root/dev/nfs #指定rootfs所在的设备是NFS也就是从NFS启动 nfsroot192.168.9.119:/nfs/rootfs #指定nfs rootfs的位置 是在ip 是192.168.9.119的机器上 的/nfs/rootfs目录下. 注意/nfs/rootfs必须和前面NFS服务配置文件设置一致见环境安装 v3 #ubuntu 20.04nfs版本的问题需在bootargs 里加v3 consolettyS0,115200 #指定内核启动后串口信息从串口0输出波特率115200 init/linuxrc #指定第一个应用程序 ip192.168.9.9 #需设置为板子u-boot自己的IP通过pri ipaddr查看 bootcmd设置 ext4load mmc 1:1 0x84000000 /boot/Image //读ext 文件系统中的 /boot/Image 到内存 0x84000000 //这个镜像是烧录在TF卡上的官方镜像 //fstype mmc 1:1 //查看emmc设备flash) 1号设备的1号分区 ext4load mmc 1:1 83100000 /boot/tegra210-p3448-0002-p3449-0000-b00.dtb //和上面一个道理 booti 0x84000000 - 83100000 /*启动Image格式的内核 booti 引导ARM64 kernel image----Image bootz 引导ARM kernel image----zImage bootm 引导u-boot自定义的kernel image----uImage。
# setenv bootargs root/dev/nfs rw nfsroot192.168.9.119:/nfs/rootfs,v3 consolettyS0,115200 init/linuxrc ip192.168.9.9
# setenv nfsboot ext4load mmc 1:1 0x84000000 /boot/Image \; ext4load mmc 1:1 83100000 /boot/tegra210-p3448-0002-p3449-0000-b00.dtb \; booti 0x84000000 - 83100000
# pri bootcmd /*备份原来的方便恢复bootcmdrun distro_bootcmd*/
# set bootcmd run nfsboot
# saveenv
# run nfsboot //能nfs挂载成功 内核三要素
module_init(led_init); //模块加载入口声明module_exit(led_exit); //模块卸载入口声明MODULE_LICENSE(“GPL”); //模块免费开源声明
//led.c
#include linux/kernel.h
#include linux/module.hstatic int led_init(void)
{printk(led init yhai 1\n);return 0;
}static void led_exit(void)
{printk(led exit\n);
}module_init(led_init); //模块加载入口声明
module_exit(led_exit); //模块卸载入口声明
MODULE_LICENSE(GPL); //模块免费开源声明
MODULE_AUTHOR(chendu yhai); //模块作者声明(可选)Makefile
KERNELDIR ? ~/linux 第二行这里的目录要选一个已经编译过的内核目录obj-m : led.o 这里的.o文件名要和.c的文件名一样
//Makefile
ifeq ($(KERNELRELEASE),)
KERNELDIR ? ~/linux
PWD : $(shell pwd)all:$(MAKE) -C $(KERNELDIR) M$(PWD) modulesclean:rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions Module* modules* a.out elseobj-m : led.o
endif验证测试
SourceInsight编辑代码cp到nfs目录编译生成ko文件插入内核
make的时候不要在共享文件夹会报错可以直接复制到nfs共享目录下编译
$ make //编译生成 模块文件 led.ko
$ file led.ko //查看一下格式看编译的是 电脑的 还是板子的ARM)# insmod led.ko /*加载模块
提示 loading out-of-tree module taints kernel - 提示内核污染出问题时你自己驱动的问题不是内核的问题。方便内核开放者排查
可添加 MODULE_INFO(intree, Y); 去除提示但最好别这样做 */
# lsmod /*查看已加载模块列表 - 检测是否已加载等效于 cat /proc/modules*/
# rmmod led //卸载模块 # dmesg //查看内核日志