海思開發板安卓linux編譯
android雖然是基於linux的,但是他們並不是二進制兼容的。
android的工作方式是,在linux系統中運行一個基於qemu的虛擬機,在虛擬機中運行java虛擬機。android程序的api還是以java為主的,所以android是不支持J2sejava程序的。
所以一個隨便的linux程序代碼是不可以編譯成android軟體的。
如果你想在android手機上運行python perl 或者shall腳本的話,是可以的,在android上有專門的終端什麼的。
❷ 華為海思hi3531sdk可以在linux下編譯嗎
不是,三星蘋果高通聯發科都不是,首先是akg框架授權,然後是三星台積電的製作,只能說設計上和一些關鍵晶元是自主研發的
❸ 如何編譯linux版本
編譯安裝內核
下載並解壓內核
解壓內核:tar xf linux-2.6.XX.tar.xz
定製內核:make menuconfig
參見makefile menuconfig過程講解
編譯內核和模塊:make
生成內核模塊和vmlinuz,initrd.img,Symtem.map文件
安裝內核和模塊:sudo make moles_install install
復制模塊文件到/lib/moles目錄下、復制config,vmlinuz,initrd.img,Symtem.map文件到/boot目錄、更新grub
其他命令:
make mrprobe:命令的作用是在每次配置並重新編譯內核前需要先執行「make mrproper」命令清理源代碼樹,包括過去曾經配置的內核配置文件「.config」都將被清除。即進行新的編譯工作時將原來老的配置文件給刪除到,以免影響新的內核編譯。
make dep:生成內核功能間的依賴關系,為編譯內核做好准備。
幾個重要的Linux內核文件介紹
config
使用make menuconfig 生成的內核配置文件,決定將內核的各個功能系統編譯進內核還是編譯為模塊還是不編譯。
vmlinuz 和 vmlinux
vmlinuz是可引導的、壓縮的內核,「vm」代表「Virtual Memory」。Linux 支持虛擬內存,不像老的操作系統比如DOS有640KB內存的限制,Linux能夠使用硬碟空間作為虛擬內存,因此得名「vm」。vmlinuz是可執行的Linux內核,vmlinuz的建立有兩種方式:一是編譯內核時通過「make zImage」創建,zImage適用於小內核的情況,它的存在是為了向後的兼容性;二是內核編譯時通過命令make bzImage創建,bzImage是壓縮的內核映像,需要注意,bzImage不是用bzip2壓縮的,bzImage中的bz容易引起誤解,bz表示「big zImage」,bzImage中的b是「big」意思。 zImage(vmlinuz)和bzImage(vmlinuz)都是用gzip壓縮的。它們不僅是一個壓縮文件,而且在這兩個文件的開頭部分內嵌有gzip解壓縮代碼,所以你不能用gunzip 或 gzip –dc解包vmlinuz。 內核文件中包含一個微型的gzip用於解壓縮內核並引導它。兩者的不同之處在於,老的zImage解壓縮內核到低端內存(第一個640K),bzImage解壓縮內核到高端內存(1M以上)。如果內核比較小,那麼可以採用zImage 或bzImage之一,兩種方式引導的系統運行時是相同的。大的內核採用bzImage,不能採用zImage。 vmlinux是未壓縮的內核,vmlinuz是vmlinux的壓縮文件。
initrd.img
initrd是「initial ramdisk」的簡寫。initrd一般被用來臨時的引導硬體到實際內核vmlinuz能夠接管並繼續引導的狀態。比如initrd- 2.4.7-10.img主要是用於載入ext3等文件系統及scsi設備的驅動。如果你使用的是scsi硬碟,而內核vmlinuz中並沒有這個 scsi硬體的驅動,那麼在裝入scsi模塊之前,內核不能載入根文件系統,但scsi模塊存儲在根文件系統的/lib/moles下。為了解決這個問題,可以引導一個能夠讀實際內核的initrd內核並用initrd修正scsi引導問題,initrd-2.4.7-10.img是用gzip壓縮的文件。initrd映象文件是使用mkinitrd創建的,mkinitrd實用程序能夠創建initrd映象文件,這個命令是RedHat專有的,其它Linux發行版或許有相應的命令。這是個很方便的實用程序。具體情況請看幫助:man mkinitrd
System.map是一個特定內核的內核符號表,由「nm vmlinux」產生並且不相關的符號被濾出。
下面幾行來自/usr/src/linux-2.4/Makefile:
nm vmlinux | grep -v '(compiled)|(.o$$)|( [aUw] )|(..ng$$)|(LASH[RL]DI)' | sort > System.map
在進行程序設計時,會命名一些變數名或函數名之類的符號。Linux內核是一個很復雜的代碼塊,有許許多多的全局符號, Linux內核不使用符號名,而是通過變數或函數的地址來識別變數或函數名,比如不是使用size_t BytesRead這樣的符號,而是像c0343f20這樣引用這個變數。 對於使用計算機的人來說,更喜歡使用那些像size_t BytesRead這樣的名字,而不喜歡像c0343f20這樣的名字。內核主要是用c寫的,所以編譯器/連接器允許我們編碼時使用符號名,而內核運行時使用地址。 然而,在有的情況下,我們需要知道符號的地址,或者需要知道地址對應的符號,這由符號表來完成,符號表是所有符號連同它們的地址的列表。
Linux 符號表使用到2個文件: /proc/ksyms 、System.map 。/proc/ksyms是一個「proc file」,在內核引導時創建。實際上,它並不真正的是一個文件,它只不過是內核數據的表示,卻給人們是一個磁碟文件的假象,這從它的文件大小是0可以看 出來。然而,System.map是存在於你的文件系統上的實際文件。當你編譯一個新內核時,各個符號名的地址要發生變化,你的老的System.map 具有的是錯誤的符號信息,每次內核編譯時產生一個新的System.map,你應當用新的System.map來取代老的System.map。
雖然內核本身並不真正使用System.map,但其它程序比如klogd, lsof和ps等軟體需要一個正確的System.map。如果你使用錯誤的或沒有System.map,klogd的輸出將是不可靠的,這對於排除程序故障會帶來困難。沒有System.map,你可能會面臨一些令人煩惱的提示信息。 另外少數驅動需要System.map來解析符號,沒有為你當前運行的特定內核創建的System.map它們就不能正常工作。 Linux的內核日誌守護進程klogd為了執行名稱-地址解析,klogd需要使用System.map。System.map應當放在使用它的軟體能夠找到它的地方。執行:man klogd可知,如果沒有將System.map作為一個變數的位置給klogd,那麼它將按照下面的順序,在三個地方查找System.map: /boot/System.map 、/System.map 、/usr/src/linux/System.map
System.map也有版本信息,klogd能夠智能地查找正確的映象(map)文件。
makefile menuconfig過程講解
當我們在執行make menuconfig這個命令時,系統到底幫我們做了哪些工作呢?這裡面一共涉及到了一下幾個文件我們來一一探討
Linux內核根目錄下的scripts文件夾
arch/$ARCH/Kconfig文件、各層目錄下的Kconfig文件
Linux內核根目錄下的makefile文件、各層目錄下的makefile文件
Linux內核根目錄下的的.config文件、arch/$ARCH/configs/下的文件
Linux內核根目錄下的 include/generated/autoconf.h文件
1)scripts文件夾存放的是跟make menuconfig配置界面的圖形繪制相關的文件,我們作為使用者無需關心這個文件夾的內容
2)當我們執行make menuconfig命令出現上述藍色配置界面以前,系統幫我們做了以下工作:
首先系統會讀取arch/$ARCH/目錄下的Kconfig文件生成整個配置界面選項(Kconfig是整個linux配置機制的核心),那麼ARCH環境變數的值等於多少呢?它是由linux內核根目錄下的makefile文件決定的,在makefile下有此環境變數的定義:
SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
-e s/arm.*/arm/ -e s/sa110/arm/ \
-e s/s390x/s390/ -e s/parisc64/parisc/ \
-e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
-e s/sh[234].*/sh/ )
..........
export KBUILD_BUILDHOST := $(SUBARCH)
ARCH ?= $(SUBARCH)
CROSS_COMPILE ?=
或者通過 make ARCH=arm menuconfig命令來生成配置界面
比如教務處進行考試,考試科數可能有外語、語文、數學等科,這里我們選擇了arm科可進行考試,系統就會讀取arm/arm/kconfig文件生成配置選項(選擇了arm科的卷子),系統還提供了x86科、milps科等10幾門功課的考試題
3)假設教務處比較「仁慈」,為了怕某些同學做錯試題,還給我們准備了一份參考答案(默認配置選項),存放在arch/$ARCH/configs/目錄下,對於arm科來說就是arch/arm/configs文件夾:
此文件夾中有許多選項,系統會讀取哪個呢?內核默認會讀取linux內核根目錄下.config文件作為內核的默認選項(試題的參考答案),我們一般會根據開發板的類型從中選取一個與我們開發板最接近的系列到Linux內核根目錄下(選擇一個最接近的參考答案)
4).config
假設教務處留了一個心眼,他提供的參考答案並不完全正確(.config文件與我們的板子並不是完全匹配),這時我們可以選擇直接修改.config文件然後執行make menuconfig命令讀取新的選項。但是一般我們不採取這個方案,我們選擇在配置界面中通過空格、esc、回車選擇某些選項選中或者不選中,最後保存退出的時候,Linux內核會把新的選項(正確的參考答案)更新到.config中,此時我們可以把.config重命名為其它文件保存起來(當你執行make distclean時系統會把.config文件刪除),以後我們再配置內核時就不需要再去arch/arm/configs下考取相應的文件了,省去了重新配置的麻煩,直接將保存的.config文件復制為.config即可.
5)經過以上兩步,我們可以正確的讀取、配置我們需要的界面了,那麼他們如何跟makefile文件建立編譯關系呢?當你保存make menuconfig選項時,系統會除了會自動更新.config外,還會將所有的選項以宏的形式保存在Linux內核根目錄下的 include/generated/autoconf.h文件下
內核中的源代碼就都會包含以上.h文件,跟宏的定義情況進行條件編譯。
當我們需要對一個文件整體選擇如是否編譯時,還需要修改對應的makefile文件,例如:
我們選擇是否要編譯s3c2410_ts.c這個文件時,makefile會根據CONFIG_TOUCHSCREEN_S3C2410來決定是編譯此文件,此宏是在Kconfig文件中定義,當我們配置完成後,會出現在.config及autconf中,至此,我們就完成了整個linux內核的編譯過程。
最後我們會發現,整個linux內核配置過程中,留給用戶的介面其實只有各層Kconfig、makefile文件以及對應的源文件。
比如我們如果想要給內核增加一個功能,並且通過make menuconfig控制其聲稱過程
首先需要做的工作是:修改對應目錄下的Kconfig文件,按照Kconfig語法增加對應的選項;
其次執行make menuconfig選擇編譯進內核或者不編譯進內核,或者編譯為模塊,.config文件和autoconf.h文件會自動生成;
最後修改對應目錄下的makefile文件完成編譯選項的添加;
最後的最後執行make命令進行編譯。
Kconfig和Makefile
Linux內核源碼樹的每個目錄下都有兩個文檔Kconfig和Makefile。分布到各目錄的Kconfig構成了一個分布式的內核配置資料庫,每個Kconfig分別描述了所屬目錄源文檔相關的內核配置菜單。在執行內核配置make menuconfig時,從Kconfig中讀出菜單,用戶選擇後保存到.config的內核配置文檔中。在內核編譯時,主Makefile調用這 個.config,就知道了用戶的選擇。這個內容說明了,Kconfig就是對應著內核的每級配置菜單。
假如要想添加新的驅動到內核的源碼中,要修改Kconfig,這樣就能夠選擇這個驅動,假如想使這個驅動被編譯,則要修改Makefile。添加新 的驅動時需要修改的文檔有兩種(如果添加的只是文件,則只需修改當前層Kconfig和Makefile文件;如果添加的是目錄,則需修改當前層和目錄下 的共一對Kconfig和Makefile)Kconfig和Makefile。要想知道怎麼修改這兩種文檔,就要知道兩種文檔的語法結構,Kconfig的語法參見參考文獻《【linux-2.6.31】kbuild》。
Makefile 文件包含 5 部分:
Makefile 頂層的 Makefile
.config 內核配置文件
arch/$(ARCH)/Makefile 體系結構 Makefile
scripts/Makefile.* 適用於所有 kbuild Makefile 的通用規則等
kbuild Makefiles 大約有 500 個這樣的文件
頂層 Makefile 讀取內核配置操作產生的.config 文件,頂層 Makefile 構建兩個主要的目標:vmlinux(內核映像)和 moles(所有模塊文件)。它通過遞歸訪問內核源碼樹下的子目錄來構建這些目標。訪問哪些子目錄取決於內核配置。頂層 Makefile 包含一個體系結構 Makefile,由 arch/$(ARCH)/Makefile 指定。體系結構 Makefile 文件為頂層 Makefile 提供了特定體系結構的信息。每個子目錄各有一個 kbuild文件和Makefile 文件來執行從上層傳遞下來的命令。kbuild和Makefile文件利用.config 文件中的信息來構造由 kbuild 構建內建或者模塊對象使用的各種文件列表。scripts/Makefile.*包含所有的定義/規則,等等。這些信息用於使用 kbuild和 Makefile 文件來構建內核。Makefile的語法參見參考文獻《【linux-2.6.31】kbuild》。
參考文獻
【linux-2.6.31】內核編譯指南.pdf
【linux-2.6.31】kbuild.pdf
Linker script in Linux.pdf
linux內核的配置機制及其編譯過程
Linux內核編譯過程詳解
Linux Kconfig及Makefile學習
❹ 三、內核&文件系統編譯
一、編譯官方提供的內核源碼
1、解壓官方提供的內核源碼包
2、根據官方提供的配置文件對內核進行配置,方式如下
make ARCH=arm xxxxx_defult_config
cp arch/arm/xxxxx_config .config
3、打開圖形界面對內核進行配置,根據需要增加或者刪除模塊和其他內容
4、對內核進行編譯
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi- uImage -j6
或者編輯Makefile文件,對其中的ARCH變數和CROSS_COMPILE變數進行修改,然後執行make uImage
5、在編譯編譯的時候回出現mkimage命令缺失,這個命令是UBootr提供的,在編譯的UBoot路徑下面找到這個命令,即可直接使用
6、編譯的時候各個方面需要一致性,
1、編譯的內核的交叉編譯工具鏈如果支持硬體浮點數運算那麼在配置內核的時候也需要添加硬體浮點數的支持
Kernel Features --->
[*] Use the ARM EABI to compile the kernel
2、在編譯的內核的時候注意保持不要做太多的修改,否則會出問題
7、編譯內核模塊
make ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi- moles -j6
8、安裝內核模塊到指定的目錄中去
make moles_install ARCH=arm CROSS_COMPILE=arm-hisiv300-linux-uclibcgnueabi- INSTALL_MOD_PATH=/home/fu/hisi/kernel/build
9、不要採用內核模塊安裝的命令來安裝內核,因為內核不需要安裝,在arch/arm/boot/uImage就是所需要的內核文件
二、編譯官方提供的busybox來構建根文件系統
1、解壓需要編譯的busybox源碼
2、進入源碼中對busybox進行配置,主要是配置交叉編譯工具鏈
Busybox Settings --->Build Options ---> 下面有關於busybox是否配置為採用共享庫的模式,還有添加交叉編譯工具鏈的前綴
3、配置需要的文件和命令進行添加或者刪除
4、然後執行命令make -jn && make install
5、創建根文件系統需要的其他的文件和目錄,在一個空白的目錄中首先拷貝busybox/_install下面的bin、sbin、usr目錄到空白目錄中,在空白目錄中創建其餘的所需要的目錄文件 bin dev etc home lib linuxrc mnt opt proc sbin sys tmp usr var等以上目錄
6、接下來在lib目錄中復制內核模塊,在編譯內核的時候模塊安裝在了指定的地方,直接拷貝過來就行。
6、創建文件系統所需要的其他文件,配置文件(最簡單的辦法就是直接復制busybox文件下面的example文件夾裡面的東西)
1、/etc/inittab 填寫或者 一下是最基本的,還有其他的需要填寫
# /etc/inittab
::sysinit:/etc/init.d/rcS //指定初始化腳本
::askfirst:-/bin/sh //指定第一次輸入回車後打開的shell
::ctrlaltdel:/sbin/reboot //指定這三個按鍵按下後的反應
::shutdown:/bin/umount -a -r //指定關機是進行的操作
2、/etc/init.d/rcS //這個就沒有詳細額硬性規定了,寫入需要初始化的東西即可
#!/bin/sh
mount -a
3、/etc/fstab //寫入mount -a是要自動掛載的文件系統
# device mount-point type options mp fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
7、拷貝需要用到的庫文件,在交叉編譯工具鏈下面存放
arm-linux-xxxxxx-gcc/lib
海思的開發板是在和tahet/lib下面,切記。
❺ 如何配置編譯在mini2440開發板上運行的linux內核
參考:http://www.it165.net/os/html/201409/9334.html
系統ubuntu12.04(非虛擬機下)
mini2440
CPU型號: S3C2440AL-40
Nanflash型號:K9F1G08
Norflash型號:SST39VF1601
LCD: 統寶 240 x 320
$: 普通賬戶
#:root賬戶
*當shell下輸入路徑時可使用tab鍵自動補全
(一)建立交叉編譯環境
1.將mini2440光碟中的linux文件夾拷貝到 /home/lianghuiyong 並改名為Linux_share
(其中兩個文檔為我後面添加進去的)
2.Ctrl+Alt+T打開shell
3.$ su - root (切換root許可權)
4.# cd /home/lianghuiyong/Linux_share
5.解壓安裝arm-linux-gcc編輯器
# tar xvzf arm-linux-gcc-4.4.3.tar.gz –C / //注意:C後面有個空格
執行該命令,將把 arm-linux-gcc 安裝到/usr/loca/arm/4.4.3 目錄。這句來自mini2440用戶手冊,我發現其實是安裝到 /opt/FriendlyARM/toolchain/4.4.3 目錄
6.# vim /root/.bashrc
7.在最後一行添加:export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin //opt/FriendlyARM/toolschain/4.4.3/bin 為arm-linux-gcc 環境變數
:wq保存退出。
# source ~/.bashrc
8.# sudo gedit /etc/environment
games後面添加標記部分
9.# arm-linux-gcc -v //gcc後面有空格
測試hello.c(這是在安裝了第二部分的linux示常式序才有examples/hello目錄)
# cd /opt/FriendlyARM/mini2440/examples/hello
# arm-linux-gcc -o hello hello.c
# ./hello
(二)安裝源代碼及其他工具
創建工作目錄(以下都為root環境下):
# mkdir -p /opt/FriendlyARM/mini2440
1>>解壓安裝linux內核源代碼
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/linux-2.6.32.2-mini2440-20100106.tar.gz
2>>解壓安裝嵌入式圖形系統qtopia源代碼
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/x86-qtopia.tgz
# tar xvzf /home/lianghuiyong/Linux_share/arm-qtopia.tgz
3>>解壓安裝嵌入式圖形系統 QtE-4.6.1 源代碼
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/arm-qte-4.6.3-20100802.tar.gz
4>>解壓安裝busybox 源代碼
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/busybox-1.13.3-mini2440.tgz
5>>解壓安裝 Linux 示常式序
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/examples-20100108.tgz
6>>解壓安裝 vboot 源代碼
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/vboot-src-20100106.tar.gz
7>>解壓安裝 bootloader 源代碼
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/bootloader.tgz
8>>解壓創建目標文件系統
# cd /opt/FriendlyARM/mini2440
#tar xvzf /home/lianghuiyong/Linux_share/rootfs_qtopia_qt4-20100816.tar.gz
9>>解壓安裝目標文件系統映象製作工具 mkyaffs2image
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/mkyaffs2image.tgz –C /
10>>解壓安裝LogoMaker
# cd /opt/FriendlyARM/mini2440
# tar xvzf /home/lianghuiyong/Linux_share/logomaker.tgz –C /
(三)定製linux內核及製作文件系統
config_mini2440_x35 – 適用於 Sony 3.5」 LCD 的內核配置文件
config_mini2440_t35 – 適用於統寶 3.5」 LCD 的內核配置文件
config_mini2440_l80 – 適用於 Sharp 8」 LCD(或兼容)的內核配置文件
config_mini2440_n35 – 適用於 NEC3.5」 LCD 的內核配置文件
config_mini2440_h43 – 適用於 4.3」 LCD 的內核配置文件
config_mini2440_a70 – 適用於群創 7」 LCD 的內核配置文件
config_mini2440_vga1024x768 – 適用於 VGA 顯示輸出(解析度 1024x768)模塊的內核
配置文件
1.配置預設文件config_t35 (統寶240x320)
# cd /opt/FriendlyARM/mini2440/linux-2.6.32.2
# cp config_mini2440_t35 .config
# make menuconfig
出現界面
不做更改,exit退出。這樣做是為了生成相應配置(統寶240x320)的頭文件。
2.編譯內核
在/opt/FriendlyARM/mini2440/linux-2.6.32.2 目錄下編譯內核
#make zImage
編譯結束後,會在 arch/arm/boot 目錄下生成 linux 內核映象文件:zImage(zImage 可下載到開發板測試)
3.定製linux內核(根據用戶手冊來走一遍)
# cd /opt/FriendlyARM/mini2440/linux-2.6.32.2
# make menuconfig
出現配置選項:
3.1配置cpu
主菜單-->System --> Type S3C2400 Machines --> FriendlyARM Mini2440 development board
3.2配置lcd驅動
主菜單-->Device Drivers-->Graphics support-->Support for frame buffer devices-->Backlight-->LCD select-->3.5 inch 240x320 Toppoly LCD
3.3配置觸摸屏
主菜單-->Device Drivers-->Input device support-->Touchscreens-->Samsung s3c24410 touchscreen input driver
3.4配置usb滑鼠和鍵盤
主菜單-->Device Drivers-->hid devices-->USB Human interface Device
3.5 配置優盤
主菜單-->Device Drivers-->SCSI device support--> SCSI disk
3.6配置萬能驅動USB攝像頭
主菜單-->Device Drivers-->Multimedia devices-->Video capture adapters -->V4L USB devices-->GSPCA based webcams-->ALi USB m 5602 Camera Driver
3.7 配置CMOS攝像頭驅動
主菜單-->Device Drivers-->Multimedia devices-->Video capture adapters-->OV9650 on the s3c2440 driver
3.8配置網卡驅動
主菜單-->Netwoking support-->Networking options -->選擇Unix和TCP/IP
主菜單-->Device Drivers-->Network device support-->Ethernet (10 or 100Mbit)-->
選擇 <*> Generic Media Independent Interface device support
<*> DM9000 support
3.9 配置USB無線網卡驅動
主菜單-->Netwoking support-->wireless-->IEEE 802.11
主菜單-->Device Drivers-->Netwoking device support-->wireless LAN-->Wireless LAN(IEEE 802.11)-->Ralink driver support-->
3.10 配置音頻驅動
主菜單-->Device Drivers-->Sound card supprt-->OSS Mixer API -->ALSA for Soc audio support-->SoC Audio for the samsung S3Cxxxx Chips
3.11 配置SD/MMC卡驅動
主菜單-->Device Drivers-->MMC/SD/SDIO card-->samsung S3C SD/MMC card
3.12 配置看門狗驅動支持
主菜單-->Device Drivers-->Watchdog Timer-->s3c2440 Watchdog
3.13 配置LED驅動
主菜單-->Device Drivers-->Character devices-->LED support for Mini2440
3.14 配置按鍵驅動
主菜單-->Device Drivers-->Character devices-->Buttons driver
3.15 配置PWM控制蜂鳴器驅動
主菜單-->Device Drivers-->Character devices-->buzzer driver for
3.16 配置AD轉換驅動
主菜單-->Device Drivers-->Character devices-->ADC driver for
3.17 配置串口驅動
主菜單-->Device Drivers-->Character devices-->Serial drivers-->samsung S3C2440/S3C2442
3.18 如何配置RTC實時時鍾驅動
主菜單-->Device Drivers-->Real Time Clock-->samsung S3C series SoC RTC
3.19 配置I2C-EEPROM驅動支持
主菜單-->Device Drivers-->I2C support -->I2C Hardware Bus support-->S3C2410 I2C Driver
3.20 配置yaff2s文件系統的支持
主菜單-->Device Drivers-->MTD-->NAND Device Support -->NAND FLASH Support
主菜單-->File systems-->Miscellaneous filesystems -->YAFFS2 file system support
3.21 配置EXT2/VFAT/ NFS等文件系統
主菜單-->File systems-->Network File Systems -->root file system on NFS
為了支持FAT32 文件系統.
主菜單-->File systems-->DOS/FAT/NT Filesystems -->VFAT (windows-95) fs support
關於mini2440 linux內核裁剪到此為止,退出後有一個是否保存提示,選擇保存!
3.22 製作Linux logo
本來想使用Logomaker,結果生成的圖片都是無數據的,這可能和系統內一些參數有關
使用命令方式製作logo:
在圖片(open_show.png)目錄下
# pngtopnm open_show.png > temp.ppm
# ppmquant 224 temp.ppm >temp2.ppm
# pnmnoraw temp2.ppm > logo.ppm
將目錄下生成的logo.ppm改成linux_logo_clut224.ppm,替代linux2.6.32.2/drivers/video/logo 目錄下的同名文件
❻ linux 編譯內核幾個常見問題解決方法
第一次把自己編譯的驅動模塊載入進開發板,就出現問題,還好沒花費多長時間,下面列舉出現的問題及解決方案
1:出現insmod: error inserting 'hello.ko': -1 Invalid mole format
法一(網上的):是因為內核模塊生成的環境與運行的環境不一致,用linux-2.6.27內核源代碼生成的模塊,可能就不能在linux-2.6.32.2內核的linux環境下載入,需要在linux-2.6.27內核的linux環境下載入。
a.執行 uname -r //查看內核版本
b.一般出錯信息被記錄在文件/var/log/messages中,執行下面命令看錯誤信息
# cat /var/log/messages |tail
若出現類似下面:
Jun 4 22:07:54 localhost kernel:hello: version magic '2.6.35.6-45.fc14.i686.PAE
' should be '2.6.35.13-92.fc14.i686.PAE'
則把 Makefile里的KDIR :=/lib/moles/2.6.35.6-45.fc14.i686.PAE/build1 改為
KDIR :=/lib/moles/2.6.35.13-92.fc14.i686.PAE/build1 //改成自己內核源碼路徑
(這里的build1是一個文件鏈接,鏈接到/usr/src/kernels/2.6.35.6-45.fc14.i686.PAE和13-92的)
然並卵,我的fedora 14 /usr/src/kernels下並沒有2.6.35.13-92.fc14.i686.PAE,只有2.6.35.13-92.fc14.i686,雖然不知道兩者有什麼區別,但改成2.6.35.13-92.fc14.i686還是不行,照樣這個問題,還好後來在看教學視頻的到啟發
法二:改的還是那個位置
KDIR :=/opt/FriendlyARM/linux-2.6.32.2 //把這里改成你編譯生成kernel的那個路徑
all:
$ (MAKE) -C $ (KDIR) M = $ (PWD) moles ARCH=arm CROSS_COMPILE=arm-linux- //加這句
2. [70685.298483] hello: mole license 'unspecified' taints kernel.
[70685.298673] Disabling lock debugging e to kernel taint
方法:在模塊程序中加入: MODULE_LICENSE("GPL");
3. rmmod: chdir(2.6.32.2-FriendlyARM): No such file or directory 錯誤解決
方法:lsmod 可查看模塊信息
即無法刪除對應的模塊。
就是必須在/lib/moles下建立錯誤提示的對應的目錄((2.6.32.2)即可。
必須創建/lib/moles/2.6.32.2這樣一個空目錄,否則不能卸載ko模塊.
# rmmod nls_cp936
rmmod: chdir(/lib/moles): No such file or directory
但是這樣倒是可以卸載nls_cp936,不過會一直有這樣一個提示:
rmmod: mole 'nls_cp936' not found
初步發現,原來這是編譯kernel時使用make moles_install生成的一個目錄,
但是經測試得知,rmmod: mole 'nls_cp936' not found來自於busybox,並不是來自kernel
1).創建/lib/moles/2.6.32.2空目錄
2).使用如下源碼生成rmmod命令,就可以沒有任何提示的卸載ko模塊了[luther.gliethttp]
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *argv[])
{
const char *modname = argv[1];
int ret = -1;
int maxtry = 10;
while (maxtry-- > 0) {
ret = delete_mole(modname, O_NONBLOCK | O_EXCL);//系統調用sys_delete_mole
if (ret < 0 && errno == EAGAIN)
usleep(500000);
else
break;
}
if (ret != 0)
printf("Unable to unload driver mole \"%s\": %s\n",
modname, strerror(errno));
}
3).把生成的命令復制到文件系統
# arm-linux-gcc -static -o rmmod rmmod.c
# arm-linux-strip -s rmmod
# cp rmmod /nfs/
cp /nfs/rmmod /sbin
代碼如下:
proc.c
[html] view plain
<span style="font-size:18px;">#include <linux/mole.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/proc_fs.h> /* Necessary because we use the proc fs */
#define procfs_name "proctest"
MODULE_LICENSE("GPL");
struct proc_dir_entry *Our_Proc_File;
int procfile_read(char *buffer,char **buffer_location,off_t offset, int buffer_length, int *eof, void *data)
{ int ret;
ret = sprintf(buffer, "HelloWorld!\n");
return ret;
}
int proc_init()
{ Our_Proc_File = create_proc_entry(procfs_name, 0644, NULL);
if (Our_Proc_File == NULL) {
remove_proc_entry(procfs_name, NULL);
printk(KERN_ALERT "Error: Could not initialize /proc/%s\n",procfs_name);
return -ENOMEM; }
Our_Proc_File->read_proc = procfile_read;//
// Our_Proc_File->owner = THIS_MODULE;
Our_Proc_File->mode = S_IFREG | S_IRUGO;
Our_Proc_File->uid = 0;
Our_Proc_File->gid = 0;
Our_Proc_File->size = 37;
printk("/proc/%s created\n", procfs_name);
return 0;
}
void proc_exit()
{ remove_proc_entry(procfs_name, NULL);
printk(KERN_INFO "/proc/%s removed\n", procfs_name);
}
mole_init(proc_init);
mole_exit(proc_exit);</span></span></span></span></span>
[html] view plain
<span style="font-size:18px;">
ifneq ($(KERNELRELEASE),)
obj-m :=proc.o
else
KDIR :=/opt/FriendlyARM/linux-2.6.32.2
#KDIR :=/lib/moles/2.6.35.13-92.fc14.i686.PAE/build1
PWD :=$(shell pwd)
all:
$(MAKE) -C $(KDIR) M=$(PWD) moles ARCH=arm CROSS_COMPILE=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif</span></span></span></span></span>
make後生成proc.ko,再在開發板上insmod proc.ko即可
執行 dmesg 就可以看到 產生的內核信息啦
❼ linux 編譯安桌系統 海思
一般是編譯之前的配置出問題了,好好看看readme,根據你自己的環境重新configure一下。
❽ 要怎麼在linux系統中編譯並運行c程序
linux如何編譯c程序呢,下面就讓我們來看看吧。
1、打開Linux系統,啟動shell命令終端。
2、在終端中輸入gedithelloworld.c命令並回車。
3、進入之後進行編譯,編譯好後保存並退出。
4、輸入gcchelloworld.c命令並回車,等待編譯成功。
5、輸入命令./a.out即可運行程序。
以上就是小編的分享,希望能幫助的大家。
❾ 如何件android中的命令移植到linux開發板上,想使用android中的一些命令,方便開發,比如logcat命令
本文用《Android深度探索(卷1):HAL與驅動開發》的隨書源代碼為例詳細說明如何配置Android驅動開發和測試環境,並且如何使用源代碼中的build.sh腳本文件在各種平台(UbuntuLinux、Android模擬器和S3C6410開發板)上編譯、安裝和測試Linux驅動。
建議讀者使用UbuntuLinux12.04或更高版本實驗本文的方法。
最好用root賬號登錄Linux。
一、安裝交叉編譯器
如果只是在UbuntuLinux上測試Linux驅動就不需要安裝交叉編譯器了,但要在Android模擬器或S3C6410開發板上進行測試,就必須安裝交叉編譯器。
首先下載交叉編譯器(分卷壓縮)
下載後解壓,會發現有兩個tgz文件,可以將這兩個文件放到/root/compilers目錄中,在Linux終端進入該目錄,執行如下命令安裝交叉編譯器。
[plain]viewplain
#tarzxvfarm-linux-gcc-4.3.2.tgz-C/
#tarjxvfarm-none-linux-gnueabi-arm-2008q3-72-for-linux.tar.bz2-C/
二、編譯和測試Linux內核
這里的Linux內核有兩個,一個是goldfish,也就是Android模擬器使用的Linux內核、另外一個是S3C6410開發板使用的Linux內核(Linux2.6.36)。
讀者首先要下載這兩個Linux內核。
Android模擬器用的Linux內核源代碼(分卷壓縮)
用於S3C6410開發板的Linux內核源代碼(分卷壓縮)
分卷1
分卷2
由於隨書代碼中的word_count驅動已經在goldfish和linux2.6.36中分別建立了符號鏈接,以便在編譯linux內核時同時也會編譯word_count驅動,所以linux內核與源代碼目錄應與作者機器上的目錄相同。
也就是兩個linux內核目錄與源代碼目錄如下:
linux內核目錄
/root/kernel/goldfish
/root/kernel/linux_kernel_2.6.36
源代碼目錄
/root/drivers
注意/root/drivers目錄下就直接是每一章的源代碼了,例如/root/drivers/ch
06、/root/drivers/ch07
現在需要將/usr/local/arm/arm-none-linux-gnueabi/bin路徑加到Linux的PATH環境變數中(不會加的上網查,這是Linux的基本功)
最後進入/root/compilers/goldfish目錄,執行make命令編譯linux內核,如果完全編譯,大概20分鍾左右。
編譯完成後,會在/root/kernel/goldfish/arch/arm/boot目錄中生成一個zImage文件,代碼1.7MB,這就是用於Android模擬器的Linux內核文件。
三、編譯Linux驅動
現在來編譯隨書光碟的驅動程序,這里以word_count驅動為例。
在Linux終端進入/root/drivers/ch06/word_count目錄。
先別忙著編譯。
首先要設置打開/root/drivers/common.sh文件,修改第一行UBUNTU_KERNEL_PATH變數值為自己機器上安裝的UbuntuLinux內核路徑,只要執行「ls/usr/src」命令即可查看當前機器可用的linux內核。
❿ 如何在linux系統裡面編譯mupdf
1.下載 MuPDF 1.2 Source:http://code.google.com/p/mupdf/downloads/detail?name=mupdf-1.2-source.zip&can=2&q=
2.編譯准備和過程:參考http://www.mupdf.com/doc/how-to-build-mupdf-for-android
3.把../platform/android工程導入Eclipse,運行,界面如下。<如在模擬器上運行apk,最好先把一個pdf文件導入>
上面的工程源碼CSDN資源下載:http://download.csdn.net/detail/hhbgk/5711295