一。进行内核修改、配置、编译的基础准备工作。

本文档介绍了如何进行3.4.24内核的修改、配置和编译工作,旨在提供一个学习平台,欢迎大家提出问题和讨论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用的3.4.24的内核,如有什么错误就提出来,大家一起学习;


########### 预备工作 #############
1.找到内核源码;解压;
2.修改名称位llinux(只用于查看内核的);
3.再解压一份,用于编译修改的内核,修改名称为linux3.4(使用的版本)
4.进入到llinux目录下,建立索引:
    a.进入arch 目录:删掉除arm 以外的全部平台
        mv arm ../
        rm -rf *
        mv ../arm .
    b.进入arm 目录:删掉多余的CPU相关目录
        mv mach-s3c64xx ../
        mv plat-samsung ../
        rm -rf mach-*
        rm -rf plat-*
        mv ../mach-s3c64xx .
        mv ../plat-samsung .
    c.回到内核的根目录下,
        ctags -R .
    d.会在当前目录下生成tags 文件,很大,100多M
    e.在当前用户的vim 配置文件(.vimrc)中,添加
        set tags = <linux>/llinux/tags
5.使用索引查找的方法:
    a.vim -t <func>        
    b.:cstags <func>    在上面的查找不对的情况下,进入命令行参数;输入命令
    c.Ctrl + ]        在查找的函数内再查找,将光标定位到函数上,按键
      Ctrl + o        返回原位置

############ 添加驱动 #############
进入linux3.4目录:
    cd drivers/
    mkdir my_test
    cd my_test
    vim test.c
-->    #include <linux/init.h>
         #include <linux/module.h>

    //内核接口,硬性规定;返回值必须是int,参数必须是void
    //__init:函数放在init 段;只在内核启动过程中执行一次,使用完了函数所占资源就释放了
    //static 是怕和别的函数重名
    static __init int test_init(void)
    {
        printk("hello world\n");
        //与printf语法相同,只是加了消息机制
    
        return 0;
        //若担心出错,return EFAULT;EFAULT是返回错误号
    }   

    //声明内核启动过程中需执行这个函数
    module_init(test_init);
    //符合符合开源规则(GPL规则)
<--    MODULE_LICENSE("GPL");

    vim Makefile
-->    obj-y += test.o
         @y:yes 需编译
        @n:no    不编译
<--    @m:模块    模块设备

    vim ../Makefile        //回到上层目录的Makefile 添加自己的目录
<->    obj-y += my_test/    //必须加上最后的 / ,这样代表的是目录,会继续搜寻下一层的Makefile

    cd ../../
回到llinux目录,编译内核
    make
烧到板子上就会在内核启动时看到 hello world

######## make menuconfig #########
1.解压完内核后,初次执行 make menuconfig,
    a.编译 scripts 目录,生成 mconf
    b.执行 Kconfig 脚本,在内核根目录下生成配置文件 .config,文件内的标号可直接应用在 Makefile 中
2.创建自己的选项卡
    进入内核根目录:
    cd drivers/my_test/
    vim Kconfig
-->    config TEST
    #创建选项卡
        bool "support test"
        default n
        help
        If you select, then ...

    menu "TEST_FOR_6410"
    #创建选项目录
        config IRQ
           bool "support irq"
            default n
            help
            ...
         config VIC_IRQ
            bool "support vic_irq"
           default n
            help
            ...
         config DMA
            tristate "support dma"
            #配置三态选项卡
            default n
            help
            ...
        config WDT
            bool "support wdt"
            default n
            depends on IRQ
            #依赖于IRQ,IRQ 不选,这个也不会出现在菜单里
            help
            ...
        config ADC
            bool "support adc"
            default n
            help
            ...
        config TS
            bool "support ts"
            default n
            depends on ADC && IRQ
            help
            ...
        config BUTTON
            bool "support button"
            default n
            depends on IRQ || VIC_IRQ
            #依赖于IRQ或VIC_IRQ
            help
            ...
        config AC97
            bool "support ac97"
            default n
            depends on IRQ && !DMA
            #依赖IRQ,不依赖于DMA
            help
            ...
    
        #设置多选一的选项
        comment "I am happy"
        #出现在下面选项之前
        choice
            prompt "select lcd type"
            #总的选项卡
            config LCD43
                bool "lcd 4.3"
                help
                ...
            config LCD70
                bool "lcd 7.0"
                help
                ...
            config LCD100
                bool "lcd 10.0"
                help
                ...
        endchoice
    
        #条件选择选项,与条件依赖很相似
        config GPIO
            bool "support gpio"
            default n
            help
            ...
        if GPIO
            config LED
                bool "support led"
                default n
                help
                ...
        endif
        #要选DM9000,同时必须选上SROMC
        config SROMC
            bool "support sromc"
            default n
            help
            ...
        config DM9000_my
            bool "support dm9000_my"
            default n
            select SROMC
            help
            ...
<--    endmenu

    vim ../Kconfig
<->    source "drivers/my_test/Kconfig" //添加自己编写的目录
    此时make menuconfig 就可以看到自己的各种目录
3.与Makefile 结合使用,就可配置,编译内核了
    进入内核根目录:    
    vim .config        //    找到自己添加的选项卡,前面会自动添加 CONFIG_,自己实现的是CONFIG_TEST
    vim drivers/my_test/Makefile
<->    obj-$(CONFIG_TEST) += test.o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值