linux下增加新原始碼到 linux核心或 模組

2021-06-11 20:21:57 字數 4635 閱讀 7229

[root@localhost home]# vi hello.c

內容如下:

#include"hello.h"

int main()

[root@localhost home]# vi hello.h

內容如下:

#include

命令:

[root@localhost home]# mkdir auto

命令:

[root@localhost home]# cp hello.* ./auto

命令:

[root@localhost home]# cd auto

[root@localhost auto]# autoscan

此時生成了2個檔案 ,分別是 autoscan.log configure.scan

autoscan會在給定的目錄及其子目錄樹中檢查原始檔,若沒有給出目錄,就在當前目錄及其子目錄樹中進行檢查。它會搜尋原始檔以尋找一般的移植性問題並建立乙個檔案configure.scan

命令:

[root@localhost auto]# vi configure.scan

修改內容如下:

# -*- autoconf -*-

# process this file with autoconf to produce a configure script.

ac_prereq(2.57)

ac_init(hello,1.0)

ac_init(full-package-name, version, bug-report-address)

am_init_automake

ac_prog_ranlib  這兩行需要手動新增

ac_config_srcdir([hello.c])

am_config_header([config.h])

# checks for programs.

ac_prog_cc

# checks for libraries.

# checks for header files.

# checks for typedefs, structures, and compiler characteristics.

# checks for library functions.

ac_config_files([makefile])--------------------指定生成makefile。如果沒有該行,請手動新增。

ac_prereq巨集宣告本檔案要求的autoconf版本,本例使用的版本為2.57

ac_init巨集用來定義軟體的名稱和版本等資訊

am_init_automake是筆者另加的,它是automake所必備的巨集。

ac_config_srcdir巨集用來偵測所指定的原始碼檔案是否存在,來確定原始碼目錄的有效性,在此處為當前目錄下的hello.c

ac_config_header巨集用於生成config.h檔案,以便autoheader使用。

命令:

[root@localhost auto]# aclocal

生成檔案aclocal.m4,該檔案主要處理本地的巨集定義。

命令:

[root@localhost auto]# autoconf

生成2個檔案:分別為autom4te.cache configure

命令:

[root@localhost auto]# autoheader

生成config.h.in

[root@localhost auto]# vi makefile.am

內容如下:

automake_options=foreign

bin_programs=hello

hello_sources=hello.c hello.h

命令:

[root@localhost auto]# automake --add-missing

可以讓automake自動新增一些必需的指令碼檔案。

生成configure depcomp install-sh missing mkinstalldirs

命令:

[root@localhost auto]# ./configure

顯示內容如下

[root@localhost auto]# ./configure

checking for a bsd-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

checking for a thread-safe mkdir -p... /bin/mkdir -p

checking for gawk... gawk

checking whether make sets $(make)... yes

checking for ranlib... ranlib

checking for gcc... gcc

checking for c compiler default output file name... a.out

checking whether the c compiler works... yes

checking whether we are cross compiling... no

checking for suffix of executables...

checking for suffix of object files... o

checking whether we are using the gnu c compiler... yes

checking whether gcc accepts -g... yes

checking for gcc option to accept iso c89... none needed

checking for style of include used by make... gnu

checking dependency style of gcc... gcc3

configure: creating ./config.status

config.status: creating makefile------------------------如果沒有該行請檢查configure.in檔案是否存在ac_config_files([makefile])

config.status: creating config.h

config.status: config.h is unchanged

config.status: executing depfiles commands

命令:

[root@localhost auto]# make

命令:

[root@localhost auto]# ./hello

顯示結果如下:

hello world!

命令:

[root@localhost auto]# make install

把程式安裝到系統目錄下。

[root@localhost auto]# hello

hello world!

命令:

[root@localhost auto]# make dist 打包

命令:

[root@localhost auto]# make clean

顯示如下:

test -z "hello" || rm -f hello

rm -f *.o core *.core

此時.o檔案及可執行檔案都會刪除,也就是說hello及hello.o檔案都刪除了。

以上的的編譯檔案是屬於上層的編譯條件,不能作為核心模組的編譯,也就是編譯成.o檔案,不能再原始碼中使用核心函式。一般對驅動沒作用。

另外一種編譯方式:  屬於核心級的編譯,編譯成.ko檔案

1. 把test.c檔案放到ylp2440的根目錄下,(和板子裡用的核心相同的核心版本),ylp2440是這個核心再pc中的檔案目錄2. 然後修改ylp2440根目錄的makefile檔案,在頭部新增如下**:

obj-m := test.o             //選擇編譯成核心模組

kerneldir := /root/test/ylp2440              //你的核心絕對路徑

pwd := $(shell pwd)        

modules:

$(make) -c $(kerneldir) m=$(pwd) modules

modules_install:

$(make) -c $(kerneldir) m=$(pwd) modules_install

上述**中,modules和modules_install為什麼要取這個名字我也不知道,另一種**寫法是這樣的:

obj-m := test.o

kerneldir := /root/test/ylp2440

pwd := $(shell pwd)

default:

$(make) -c $(kdir) subdirs=$(pwd) modules

還有另外一種方式,就是參照driver中的kconfg  和   makefile 來增加編譯條件。

為核心增加新原始碼目錄編譯配置

開始著手學習arm linux知識了,為了自己的學習和實踐 和核心源生 實現分離和解耦,決定在核心的根目錄新增乙個自己的原始碼目錄,配置並編譯進核心。一 新增配置選項及編譯指令碼 1 新增根目錄的配置選項 修改檔案 arch arm kconfig 在 menu system type 之前新增專案...

2013 5月更新原始碼 標註一下!

vs201 2 功能介紹 實現了笑話分類展示,詳細笑話展示的功能,只有展示功能,適合win8應用初學者學習。a34 企業 原始碼 2013 5 24 vs201 0康軟人力資源管理系統原始碼 2013 5 24 vs201 0 原始碼描述 康軟企業人力資源管理系統是乙個典型的資訊管理系統,本系統是為...

linux下MySql原始碼安裝

linux下mysql原始碼安裝 以下只是簡單的安裝,如果你要是搭建lamp平台的話,還要在編譯的時候加入一些引數。groupadd mysql useradd g mysql mysql tar zxvf mysql tar.gz cd mysql configure prefix usr loc...