ldd3 读书笔记 —— Hello, world!

阅读: 评论:0

ldd3 读书笔记 —— Hello, world!

ldd3 读书笔记 —— Hello, world!

某程序员对书法十分感兴趣,退休后决定在这方面有所建树。于是花重金购买了上等的文房四宝,一番磨墨拟纸,并点上了上好的檀香,颇有王羲之风范,又具颜真卿气势,定神片刻,泼墨挥毫,郑重地写下一行字:
Hello, world!
 
ldd3的源代码可以从这里下载:/  然后找“Download Example Code”
hello.c在misc-modules这个目录里面。不过我看书的习惯是把所有的代码都手工输入一次。
 
Makefile如下:
ifneq ($(KERNELRELEASE),)
    obj-m := hello.o
else
    KERNELDIR ?= /lib/modules/$(shell uname -r)/build
    PWD := $(shell pwd)
default:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif
make的时候,Makefile会被执行两次:
第一次进入else,设置KERNELDIR和PWD,然后执行$(MAKE) -C的那一行,这次的make会先到内核源代码的根目录执行,然后再回来,这次就会执行到obj-m := hello.o了。
 
hello.c的代码:
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
 printk(KERN_ALERT "Hello, world/n");
 return 0;
}
static void hello_exit(void)
{
 printk(KERN_ALERT "Goodbye, cruel world/n");
}
module_init(hello_init);
module_exit(hello_exit);
 
这个代码实在太简单了,没什么好说的。make之后,用modinfo可以查看hello.ko的信息。注意其中的vermagic,他记录了编译的内核的版本,如果运行的版本与此不一致,insmod的时候会失败。
用su切换到root,insmod/rmmod,用dmesg和lsmod可以看到效果。

本文发布于:2024-01-29 18:24:05,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170652384917398.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:读书笔记   world
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23