當前位置:首頁 » 編程軟體 » androidlinux內核編譯

androidlinux內核編譯

發布時間: 2022-04-29 13:01:56

linux下如何編譯Android源碼~~~

使用的是putty.exe軟體本身機器windows環境連接伺服器的linux環境編譯androidputty.exe界面在上面有提到了輸入你的賬號密碼後會進入這樣的效果就算是成功了可以ls就是當前目錄下的文件/文件夾_job就是我的文件夾接下來我們就要進入到源碼所在的目錄cd 你的android源文件的目錄比較笨的方法就是cd _joblscd _........就是一層一層的往下走好的辦法就是cd job/按Tab鍵 會自動填寫目錄名(如果有多個文件夾他會給你列出來)如果順利的來到源文件目錄下在編譯前我們需要預編譯一下(可能在源碼裡面還有沒有解包的需要完全解包)下面的所有的命令前面必須要加 sudo-->超級用戶模式還有就是下面的命令都是要在根目錄下進行編譯編譯前預處理(make prebuild)執行完成後就可以進行編譯了編譯Android代碼(make)-->要等最少1-3個小時吧等編譯完成後就可以使用Eclipse修改你的源碼了編譯後處理(make firmware)su make firmware注意:編譯時必須要在根目錄下進行

Ⅱ 為了能從sd卡啟動android系統,內核應該怎麼編譯

本人使用mini6410開發了一個sqlite資料庫的程序,在mini6410的linux系統下已經能夠成功運行了。因為Android使用的也是linux內核,所以我想當然的認為按照同樣的方法將程序移植到mini6410的android系統中也可以成功運行,但是當我運行程序的時候卻提示我不能找到可執行文件(xlisten-arm是交叉編譯出來的可執行文件):

/ # ./xlisten-arm
/system/bin/sh: ./xlisten-arm: not found

1.探索:

在網上搜索起初認為可能是庫文件的不全導致的,於是在查看可執行文件xlisten-arm所需要的動態鏈接庫:

執行語句:

# arm-linux-readelf -a ./xlisten-arm | grep "Shared"
0x00000001 (NEEDED) Shared library: [libsqlite3.so.0]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libcrypt.so.1]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libdl.so.2]
0x00000001 (NEEDED) Shared library: [libc.so.6]

知道所需的動態鏈接庫後,到android文件系統中去照著寫庫文件,在目錄/system/lib 中,果然缺少相應的庫文件,於是認為找到了我問題的根源所在,在復制相應庫文件的時候為了保留原來的屬性,還特意用了

#cp -a filename dir

誰知將這些庫都添加進去以後,仍然無濟於事!

看來不僅僅事庫文件缺失的問題了,而且一般來說,如果真的是因為缺少庫文件而導致的問題,終端會提示我們鏈接某庫文件時沒有找到該庫文件。

2.正確的解決方法:

將程序編譯的時候選擇靜態編譯,即使用選項 -static

我是對Makefile文件中的CFLAG變數進行修改

CFLAGS = -Wall

改為;

CFLAGS = -Wall -static

然而此時又出現問題了:

undefined reference to `pthread_mutex_*'

undefined reference to `dl*'

提示沒有定義這些函數,於是在包含的庫文件中添加了這兩個庫文件

在Makefile中,修改LIBS變數;

LIBS = -lsqlite3 -lm -lcrypt

改為:

LIBS = -lsqlite3 -lm -lcrypt -lpthread -ldl

然後進行交叉編譯,成功了!

編譯出來的可執行文件比較大,因為事靜態編譯的,我的有2M多,

拷貝到開發板的andriod系統中,

修改許可權:

#chmod 777 xlisten-arm

執行:

/ # ./xlisten-arm

OK!能夠正確的執行了!

Ⅲ 編譯linux內核和編譯linuxROM有什麼區別

如果我沒理解錯的話,你的「linux
內核」是針對PC,intel處理器;「linux
ROM」是針對移動設備(比如adnroid
內核),ARM處理器。那區別就是編譯器把內核翻譯成intel能懂的機器語言,還是arm能懂得,他們架構完全不一樣以及使用完全不同的指令集。
//////////////////////////////////////////////////////////////////////////////
android內核是指google
基於linux
kernel定製的操作系統內核,主要添加了一些android設備驅動,是具備跨平台能力的源碼;android
ROM是指編譯好的整個android操作系統,不光光是內核了,還有外圍的一些庫,等等;andriod源碼是指整個android
操作系統的源碼,包括內核,各種庫,java層封裝,sdk等等。

Ⅳ 怎麼在Android程序里載入linux內核模塊

工具/原料

Android程序里載入linux內核模塊
方法/步驟

java層。 java.lang.Runtime's exec() methods:native層就是jni了。
可以用popen() 。
但指令知否支持就得看bionic了。
也可以嘗試system() and pipe。
普通apk不可能有root許可權,除非機器被root了,使用Runtime.exec之類的執行su -c insmod xx.kosu為root的象徵,配合superuser使用 。
在終端下使用su進入root用戶,然後insmod xx.ko這個肯定可以成功的,因為insmod在root用戶下執行的。但是Java的Runtime.exec()也好,Native層execl()也好,只能用su -c命令臨時在root用戶下執行一條指令。adb shell進入終端,普通用戶下執行su -c insmod xx.ko,會發現命令執行失敗,失敗原因就是需要注意的地方,su的-c參數只把下一個變數作為可執行的指令,因此其執行的命令是insmod而參數並沒有傳遞過去,xx.ko作為了su的參數,因此如果想執行成功我們需要使用su -c "insmod xx.ko",將傳遞給insmod的參數和命令組合成一個參數。這樣的話在Java層和Native層執行失敗的問題也可以解決了,在Runtime.exec()中將命令格式進行格式化,比如Runtime.exec(「su -c 」 + "\"insmod xx.ko\"" ),或者在Native中執行execl("/sytem/bin/su","/sytem/bin/su","-c","insmod xx.ko", NULL),這樣最終傳遞給shell的命令就是su -c "insmod xx.ko"了。

Ⅳ 如何在Linux平台下編譯android工程

我是在windows下做開發的,但是編譯環境還是在linux上。。大體的步驟如下:
1.首先在windows環境下編寫工程(eclipse下編寫android工程)
2.打開linux開發環境(tcl平台:\\10.120.90.207\longc\workspace\code\project\kernel\android\JB)
3.將運行環境的腳本文件運行./evnsetup:配置android運行環境
/JB/build/
找到envsetup.sh
運行.envsetup.sh(source envsetup.h或./envsetup)
所有操作都在終端完成
4.將工程文件拷貝到指定目錄下(TCL平台下的自帶程序在package\TCL_Apps目錄下)
5.刪除一些文件
保留/res,/src,AndroidManifest.xml三個文件
創建Android.mk(makefile文件,linux下用makefile文件來集成一些命令,運行程序的指令和設置都在此處)Android.mk的編寫
6.編譯
進入工程文件目錄
輸入mm命令進行編譯。
7.生成apk文件,編譯完成

Ⅵ 怎麼通過自己編譯的linux內核去啟動安卓系統或其他系統

你需要專門的刷機工具了吧。手機啟動流程是這樣的:bootloader->內核->android framework->app,如果你把內核幹掉,做個新的,只能在bootloader上對內核分區進行燒寫。

Ⅶ android 怎樣編譯kernel 命令 make

方法如下:
在Linux的環境下:
建立目錄:

mkdir ~/android-kernel cd android-kernel

下載源代碼, 大概有280MB, 慢慢等哈~~~ (當然你要先安裝git) git clone git://git.linuxtogo.org/home/groups/mobile-linux/kernel.git
類似的屏幕信息:
Initialized empty Git repository in /home/user/android-kernel/kernel/.git/ remote: Counting objects: 908251, done.
remote: Compressing objects: 100% (153970/153970), done.
remote: Total 908251 (delta 755115), reused 906063 (delta 753016) Receiving objects: 100% (908251/908251), 281.86 MiB | 292 KiB/s, done. Resolving deltas: 100% (755115/755115), done. Checking out files: 100% (22584/22584), done.
然後去到htc-msm branch: cd kernel
git checkout -b htc-msm origin/htc-msm
屏幕信息:
Branch htc-msm set up to track remote branch refs/remotes/origin/htc-msm. Switched to a new branch "htc-msm"

下載ARM的toolchain, 大概64MB左右, 下到~/android-kernel: 下

:
http://www.codesourcery.com/gnu_toolchains/arm/portal/package2549/public/arm-none-linux-gnueabi/arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

cd ~/android-kernel
tar xjf arm-2008q1-126-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
編譯kernel

准備預設的Kaiser 配置文件.config
cd ~/android-kernel/kernel

make htckaiser_defconfig ARCH=arm
然後編譯zImage:
export PATH=~/android-kernel/arm-2008q1/bin:$PATH
make zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
編譯好的在: ~/android-kernel/kernel/arch/arm/boot/zImage

如果你的機器是多核的, 可以編譯的時候用-j <cores/cpus_number>來加速:
比如, 雙核的可以:
make -j 2 zImage ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi
滿意請採納謝謝

Ⅷ 怎麼修改Android 的Linux內核

Android 產品中,內核格式是Linux標準的zImage,根文件系統採用ramdisk格式。這兩者在Android下是直接合並在一起取名為boot.img,會放在一個獨立分區當中。這個分區格式是Android自行制定的格式。

Android開發時,最標準的做法是重新編譯於內核和根文件系統,然後調用Android給的命令行文件mkbootimg(out/host/linux-x86/bin/)來打包。

在製作手機ROM時,有時會單獨編譯內核或抽出根文件進行修改內容,比如我只編譯內核,其餘的地方不變。這樣重新安裝巨大的Android開發環境實在不劃算。因此很多boot.img解包工具被人開發出來,這一些工具都是把內核和根文件系統從一個現成的boot.img抽取出來,修發後再次打包還原。

一.常見的解包工具

因為boot.img的格式比較簡單,它主要分為三大塊(有的可能有四塊)

因此很多人開發分析工具,有是linux shell腳本,比如repack-zImage,也有人採用perl,還有C語言編寫的 unbootimg,

我使用的是在源碼位置system/core/mkbootimg/ 下的 mkbootimg。為了簡化,藍點工坊把與mkbootimg中打包工具和解包工具以及所包含的libmincrpty庫抽出來,並且重寫一個Makefile,作為開源項目。
使用者只需要在linux(需安裝gcc,make,一般是標配)或windows(需要安裝mingw)的命令行執行make,即可產生可執行文件mkbootimg ,unpackbootimg。

二.解/打包工具使用

解包工具:unpackbootimg

常見格式
unpackbootimg -i .\tmp\boot.img -o .\out

這一句命令行表示把boot.img解包,所有文件輸出到out目錄下

它會解壓出如下文件:
boot.img-zImage (內核文件)
boot.img-ramdisk.gz (根文件系統打包文件)
boot.img-cmdline (mkbootimg cmdline參數)
boot.img-pagesize (mkbootimg pagesize參數)

boot.img-base (mkbootimg base參數)

打包工具:mkbootimg (Android自帶)

常見的命令格式:
./mkbootimg --cmdline 'no_console_suspend=1 console=null' --kernel zImage --ramdisk boot/boot.img-ramdisk.gz -o boot.img --base 02e00000
這句含義是把內核文件zImage和boot目錄下的根文件壓縮包 boot.img-ramdisk.gz打包成boot.img.
其中cmdline和base的值均來源於unpackbootimg的結果

Ⅸ 如何寫android或linux內核可載入模塊

hello.c
/* hello.c */
#include <linux/init.h>
#include <linux/mole.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("tang");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world/n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, hello/n");
}
mole_init(hello_init);
mole_exit(hello_exit);
----------------------------------------------------------------------------
Makefile
/* Makefile*/
PWD := $(shell pwd)
KVER := $(shell uname -r)
KDIR := /lib/moles/$(KVER)/build
obj-m:=hello.o
all :
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD)
.PHONY : clean
clean :
rm -rf .*.cmd *.mod.c *.o *.ko .tmp_versions

linux下可以make編譯,希望對你有幫助!

Ⅹ Android內核與傳統Linux內核有何變化

甲骨文軟體人才創新發展中心期待您的到來!
和標準的Linux內核一樣,Android內核主要實現內存管理、進程調度、進程間通信等功能。Android內核是在標准Linux內核的基礎上修改而成。為了適應嵌入式硬體環境和移動應用程序的開發,Android對標准Linux內核進行了一定的修改。經過與標准Linux內核源代碼進行詳細對比,可以發現,Android內核與標准Linux內核在文件系統、進程間通信機制、內存管理等方面存在不同。
文件系統:不同於桌面系統與伺服器,移動設備大多採用的不是硬碟而是採用Flash作為存儲介質,因此,Android內核中增加了標准Linux內核中沒有採納的YAFFS2文件系統。YAFFS2按層次結構設計,分為文件管理介面、內部實現層和NAND,簡化了其本身與系統的介面設計,能更方便地集成到系統當中。
進程間通信機制:Android增加了一種進程間的通信機制IPCBinder,Binder通過守護進程ServiceManager管理系統中的服務,負責進程間的數據交換。各進程通過Binder訪問同一塊共享內存,以達到數據通信的機制。從應用層的角度看,進程通過訪問數據守護進程獲取用於數據交換的程序框架介面,調用並通過介面共享數據,而其他進程要訪問數據,也只需與程序框架介面進行交互,方便了程序員開發需要交互數據的應用程序。
內存管理:在內存管理模塊,Android內核採用了一種不用於標准Linux內核的低內存管理策略。在標准Linux內核當中,使用一種叫做OOM(OutofMemory)的低內存管理策略;當內存不足時,系統檢查所有的進程,並對進程進行限制評分,獲得最高分的進程將被關閉。Android新增加了一種內存共享的處理方式Ashmem。通過Ashmem,進程間可以匿名自由共享具名的內存塊,這種共享方式在標准Linux當中不被支持。
經過分析,Android內核由標准Linux內核修改而來,因此繼承了Linux內核的各種優點,保留了標准Linux內核的主體架構。同時,Android按照移動設備的需求,在文件系統、內存管理、進程間通信機制、電源管理等方面進行了修改,添加相關的驅動程序和一些必要的新功能,但是與大多數精簡的嵌入式Linux操作系統相比,Android很大程度上保留了標准Linux的基本架構,因此,Android系統應用范圍更加廣泛,拓展性更強。

熱點內容
阿里雲上傳慢 發布:2025-04-23 01:04:10 瀏覽:586
我爸電腦配置給別人看沒什麼事吧 發布:2025-04-23 00:58:54 瀏覽:723
大學編程課程 發布:2025-04-23 00:48:55 瀏覽:469
伺服器的內網ip有什麼用 發布:2025-04-23 00:46:40 瀏覽:958
誅仙3需要什麼配置 發布:2025-04-23 00:29:49 瀏覽:665
什麼是編譯錯誤參數不可選 發布:2025-04-23 00:23:06 瀏覽:520
libx264編譯 發布:2025-04-23 00:13:37 瀏覽:222
access的web資料庫 發布:2025-04-23 00:08:29 瀏覽:46
安卓上面的谷歌搜索框怎麼去除 發布:2025-04-23 00:07:27 瀏覽:171
c判斷文件夾是否存在 發布:2025-04-22 23:56:36 瀏覽:943