在loongnix 上编译内核模块及内核

在loongnix 上编译内核模块及内核

$ cd /lib/modules/`uname -r`

$ ls -l

总用量 1812

lrwxrwxrwx 1 root root     53 9月  27 12:48 build -> /usr/src/kernels/3.10.84-22.fc21.loongson.10.mips64el

drwxr-xr-x 5 root root   4096 10月 16 16:35 extra

drwxr-xr-x 9 root root   4096 10月 16 16:35 kernel

-rw-r--r-- 1 root root 519076 10月 16 16:36 modules.alias

-rw-r--r-- 1 root root 514163 10月 16 16:36 modules.alias.bin

-rw-r--r-- 1 root root    418 9月  27 12:48 modules.block

-rw-r--r-- 1 root root   6392 9月  27 12:48 modules.builtin

-rw-r--r-- 1 root root   8122 10月 16 16:36 modules.builtin.bin

-rw-r--r-- 1 root root 103936 10月 16 16:36 modules.dep

-rw-r--r-- 1 root root 157036 10月 16 16:36 modules.dep.bin

-rw-r--r-- 1 root root    236 10月 16 16:36 modules.devname

-rw-r--r-- 1 root root     51 9月  27 12:48 modules.drm

-rw-r--r-- 1 root root     37 9月  27 12:48 modules.modesetting

-rw-r--r-- 1 root root    874 9月  27 12:48 modules.networking

-rw-r--r-- 1 root root  48044 9月  27 12:48 modules.order

-rw-r--r-- 1 root root     86 10月 16 16:36 modules.softdep

-rw-r--r-- 1 root root 199535 10月 16 16:36 modules.symbols

-rw-r--r-- 1 root root 246976 10月 16 16:36 modules.symbols.bin

lrwxrwxrwx 1 root root      5 9月  27 12:48 source -> build

drwxr-xr-x 2 root root   4096 9月  27 12:47 updates

 

查看kernel 包名

$ rpm -qa kernel

kernel-3.10.84-22.fc21.loongson.10.mips64el

 

下载kernel 源码

$ yumdownloader --source kernel-3.10.84-22.fc21.loongson.10.mips64el

 

解压源码

$ rpm2cpio kernel-3.10.84-22.fc21.loongson.10.src.rpm  | cpio -dvi

$ sudo su

# tar xf linux-3.10.84.tar.gz -C /usr/src/kernel

 

模块文件

Makefile:

BASEINCLUDE ?= /lib/modules/`uname -r`/build

mytest-obj := my_test.o

obj-m:= my_test.o


all:

    $(MAKE) -C $(BASEINCLUDE) M=$(PWD) modules

clean:

    $(MAKE) -C $(BASEINCLUDE) SUBDIRS=$(PWD) clean;

    rm -f *.ko

my_test.c:

#include <linux/module.h>

#include <linux/init.h>


static int __init my_sample_init(void)
{
    printk("%s entry.\n", __func__);

    return 0;
}



static void __exit my_smaple_exit(void)
{

    printk("%s entry.\n", __func__);

}



module_init(my_sample_init);

module_exit(my_smaple_exit);


MODULE_LICENSE("GPL");

MODULE_AUTHOR("water");

MODULE_DESCRIPTION("my test kernel module");

MODULE_ALIAS("mytest");

# make

error: not find .../generated/autoconf.h no such file

产生 generated/autoconf.h 文件

# cd /usr/src/kernel/3.10.0

# cp /boot/config  .

# make -j4

 

# insmod my_test.ko

insmod: ERROR: could not insert module module_test.ko: Invalid module format

$ modinfo my_test.ko

filename:       /home/loongson/rlk_test/lesson1/my_test.ko

alias:          mytest

description:    my test kernel module

author:         water

license:        GPL

rhelversion:    7.4

depends:        

vermagic:       3.10.0 SMP preempt mod_unload modversions LOONGSON3 64BIT

 

$ cd /lib/modules/`uname -r`/kernel/drivers/char

$ modinfo lp.ko

filename:       /lib/modules/3.10.84-22.fc21.loongson.10.mips64el/kernel/drivers/char/lp.ko

license:        GPL

alias:          char-major-6-*

rhelversion:    7.4

depends:        parport

intree:         Y

vermagic:       3.10.84-22.fc21.loongson.10.mips64el SMP preempt mod_unload modversions LOONGSON3 64BIT

parm:           parport:array of charp

parm:           reset:bool

 

对比发现vermagic 值不同。

修改内核version

# uname -r

3.10.84-22.fc21.loongson.10.mips64el

 

# cd /usr/src/kernel/3.10.0

# yum install ncurses-devel

# make menuconfig

General setup ---> Local version - append to kernel release

 

# make -j4

 

重新编译模块

$ modinfo my_test.ko

filename:       /home/loongson/rlk_test/lesson1/my_test.ko

alias:          mytest

description:    my test kernel module

author:         water

license:        GPL

rhelversion:    7.4

depends:        

vermagic:       3.10.0.fc21.loongson.10.mips64el SMP preempt mod_unload modversions LOONGSON3 64BIT

 

$ insmod my_test.ko

$ dmesg | tail

[   11.398437] IPv6: ADDRCONF(NETDEV_UP): virbr0: link is not ready

[   11.488281] virbr0: port 1(virbr0-nic) entered disabled state

[   21.429687] EMC1412: No valid reference.

[   56.042968] device virbr0-nic left promiscuous mode

[   56.042968] virbr0: port 1(virbr0-nic) entered disabled state

[   56.078125] IPv6: ADDRCONF(NETDEV_UP): virbr0-nic: link is not ready

[ 1971.406250] EXT4-fs (sda6): mounted filesystem with ordered data mode. Opts: (null)

[ 4502.976562] my_test: loading out-of-tree module taints kernel.

[ 4502.976562] my_sample_init entry.

[ 4515.906250] my_smaple_exit entry.

 

 

安装使用自编译的内核

# cd /usr/src/kernel/3.10.0

# make install //这个只是为验证自己编译安装内核用的

install: 无法获取"vmlinuz" 的文件状态(stat): 没有那个文件或目录

arch/mips/Makefile:332: recipe for target 'install' failed

make: *** [install] Error 1

原因是没有生成vmlinuz, 只生成了vmlinux。修改压缩算法为 gzip, 之后重新编译。

# make menuconfig

Gernral setup ---> Kernel compression mode

 

安装内核模块文件, 会安装在 /lib/modules 下

# make modules_install

 

制作ram disk

# mkinitrd initr.3.10.0.img 3.10.0

 

制作 initramfs(推荐用这个)

# cd /boot

# dracut initramfs-3.10.0.img 3.10.0

 

现在的发行版基本上都是用initramfs 代替 ram disk。

修改grub.cfg 文件,添加新的启动项(参照旧的复制,改名即可)。

 

 

参考链接:

https://www.ibm.com/developerworks/cn/linux/l-cn-kernelmodules/

https://mirrors.edge.kernel.org/pub/linux/utils/boot/dracut/dracut.html

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值