亚洲国产高清在线观看视频_日韩欧美国产aⅴ另类_奇米影视7777久久精品_欧美 国产 亚洲 卡通 综合

您的位置:首頁 > 熱點 >

嵌入式linux新手入門手記-搭建基本工作平臺

當然,本人已經不是電子控制器開發(fā)的新手了。從事單片機,DSP開發(fā)十多年,但是一直沒有接觸過嵌入式linux。2014年初由于公司的項目需要,決定引入嵌入式linux的平臺進行產品研發(fā),從這個時候開始正式接觸嵌入式linux,并開始在linux上進行工作。到現(xiàn)在差不多1年半,現(xiàn)在將這個過程重新整理出來,和大家一起分享,同時也給自己留一個記錄。

本文引用地址:http://www.eepw.com.cn/article/278045.htm

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

“嵌入式linux新手入門手記”會是一個系列,記錄我從第一次正式開始在linux平臺工作,到完成項目的過程中各問題的解決過程。當然,作為工作經歷的記錄,這個手記的系列不討論理論方面的知識,只是忠實的記錄問題,以及問題的解決過程和方法。

首先在這里介紹一下我的開發(fā)平臺:TI的AM335x的平臺,硬件已經調試完成,在本手記中將不進行硬件方面的記錄。主要需要的功能是:USB接口單點觸摸屏,1024*768 TFT-LCD顯示,GUI的用戶程序實現(xiàn)人機交互,100M以太網,不需要3D以及圖形加速,256M DDR2,256M nand,一個SD卡槽,一個RS232接口。

首先,要進行嵌入式linux開發(fā),當然需要搭建計算機的工作平臺,考慮工作的方便和效率,決定在計算機上安裝獨立linux系統(tǒng),和window做成雙引導。

2010年時用過一段時間的ubuntu,所以決定還是使用ubuntu,在ubuntu的官網上下載32位版本的14.04(64位的系統(tǒng)驅動程序比較難找)。使用ubuntu推薦的Universal-USB-Installer-1.9.5.9工具,將ubuntu的安裝鏡像寫入到一個標準的4GU盤上(標準的意思是指不要有亂七八糟的功能,可能會導致兼容性問題而無法啟動ubuntu安裝程序。寫入時會導致U盤的內容全部丟失,需要先備份U盤的文件)。

在windows7的計算機管理中啟動磁盤管理器,我的計算機硬盤是500G的,分為2個分區(qū),并格式化為2個磁盤:C(190G)和D(其余空間),在磁盤管理器中對D分區(qū)進行壓縮,壓縮出100G的磁盤空間出來,對這個壓縮出來的100G空間不要做其他處理,退出磁盤管理器。

重新啟動計算機并進入到BIOS中設置啟動順序,使計算機能夠從U盤啟動。使用制作好的Ubuntu安裝U盤啟動計算機后,將進入到ubuntu的體驗系統(tǒng)中,選擇安裝,然后根據安裝的提示進行,這里需要注意2點,一是語言的選擇,最好在安裝時選擇中文,這樣避免后續(xù)設置ubuntu時顯示、輸入法等的問題。二是最好不要手動指定安裝分區(qū),有ubuntu安裝程序自動對之前劃分出來的100G空間進行管理,我的計算機安裝有6G的內存,所以安裝程序將100G空間劃分為一個6G的交換分區(qū),其他用于安裝ubuntu。然后ubunut會詢問是否和其他操作系統(tǒng)共存時,一定要選擇和其他操作系統(tǒng)共存,否則會導致安裝完ubuntu后無法啟動windows的問題。

ubuntu14.04的安裝還是比較智能的,基本不需要自己的其他干涉,就自動安裝完成了。

在安裝完成后,需要對ubuntu進行一些設置,這里就不再過多描述,下面僅對一些和后續(xù)嵌入式linux開發(fā)有關的進行說明:

另外,我使用的shell是bash,而ubuntu14.04安裝后默認用的是dash,需要修改為默認使用bash。

1、安裝tftp服務。嵌入式linux開發(fā),尤其是uboot和kernel相關的開發(fā),需要不斷的修改MLO,u-boot,uImage等,這些文件是需要寫入到am335x的板載flash上的,如果每次都是用SD,CCS,燒寫工具等,是一個很麻煩的事情。由于uboot支持tftp下載文件并燒寫flash,這是一個較為便捷的方式。

在自己工作目錄home/XXXX下建立一個空目錄,取名為tftp;

給這個目錄賦予讀寫等權限:sudo chmod 777 ./tftp;

安裝tftp服務:sudo apt-get install xinetd tftpd-hpa tftp-hpa;

安裝完成后,會自動重新啟動xinetd,這時在/etc下會出現(xiàn)xinetd.d目錄;

進入到這個目錄中,執(zhí)行sudo touch tftpd;

然后執(zhí)行sudo gedit ./tftpd,在tftpd文件中添加以下內容并保存退出:

service tftp

{

disable=no

socket_type=dgram

wait=no

user=root

protocol=udp

server=/usr/sbin/in.tftpd

server_args=-s /home/XXXX/tftp

log_on_success=PID HOST DURATION

log_on_failure=HOST

}

修改/etc/inetd.conf文件:sudo gedit /etc/inetd.conf,增加以下內容:

tftp dgram udp wait

root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /home/XXXX/tftp

修改/etc/default/tftpd-hpa:

#/etc/default/tftpd-hpa

TFTP_USERNAME="tftp"

TFTP_DIRECTORY="/home/XXXX/tftp"

TFTP_ADDRESS="0.0.0.0:69"

TFTP_OPTIONS="--secure"

#Defaults for tftpd-hpa

RUN_DEAMON="yes"

OPTIONS="-1 -s /home/XXXX/tftp"

保存并退出后,重新啟動tftp服務:sudo /etc/init.d/xinetd restart

sudo /etc/init.d/tftpd-hpa restart

2、安裝nfs服務。nfs服務是嵌入式linux開發(fā)一個非常重要的服務,使用這個服務,可以將計算機上的一個文件目錄掛載為am335x運行時的根文件系統(tǒng),這樣避免不斷燒寫flash。

建立一個文件夾,用于nfs服務,名稱為nfs;

為安裝nfs服務,修改ubuntu的軟件源,如果不是“main server”,修改為“main server”,然后點擊close,彈出對話框點擊reload,然后等待處理結束;

安裝nfs服務,sudo apt-get install portmap nfs-kernel-server

sudo apt-get install portmap nfs-common

配置共享文件,編輯/etc/exports,在文件末尾添加一行:/home/XXXX/nfs *(rw,sync,no_root_squash)。用于設置nfs目錄的工作模式,以及用戶進入該目錄的權限為root;

重新啟動nfs服務,sudo /etc/init.d/portmap restart

sudo /etc/init.d/nfs-kernel-server restart

檢查nfs服務是否已經配置成功。

3、設置計算機的網卡。為開發(fā)嵌入式linux,我的計算機安裝了2個網卡,一個USB接口的無線網卡,用于上網。另外一個100M PCI接口的有線以太網卡,用于連接am335x。將有線以太網卡的IP地址設置為固定:192.168.1.50,子網掩碼255.255.255.0,其他可以不設置。

4、下載TI的am335x的開發(fā)工具包,這里我使用的是2011年獲得的開發(fā)包,其中uboot是2011版,以及l(fā)inux3.2.0。配合這個開發(fā)包使用的是arm-none-linux-gnueabi和arm-arago-linux-gnueabi交叉編譯工具。由于種種原因,公司決定使用TI-SDK-AM335X-01.00.00.00中的交叉編譯工具,是arm-linux-gnueabihf-gcc 4.7.3。

將TI的SDK解壓縮到/home/XXXX/ti-sdk-am335x-evm-01000000目錄;

將uboot2011解壓縮到/home/XXXX/uboot目錄;

將linux3.2.0解壓縮到/home/XXXX/kernel目錄;

修改上述目錄的權限,使得XXXX擁有對這些目錄以及其文件的讀寫權限。

5、修改環(huán)境變量配置,進行第一次編譯uboot和kernel。

編輯~/.bashrc文件,將編譯uboot和kernel需要的環(huán)境變量加入到文件中,并使生效。 下面是需要加入到~/.bashrc中的內容:

PATH=$PATH:/home/XXXX/ti-sdk-am335x-evm-01000000/linux-devkit/sysroots/i686-arago-linux/usr/bin:/home/XXXX/uboot/am335x/tools:

上述/home/XXXX/uboot/am335x/tools目錄,在編譯uboot時,會生成后續(xù)用于制作uImage文件的工具,用來編譯kernel,所以在這里要加入到PATH中。否則后續(xù)編譯kernel時會出現(xiàn)錯誤。

編譯uboot時會生成用于制作kernel的image的工具,這些工具在編譯kernel是被make調用,所以在編譯kernel時,必須保證之前已經正確編譯或uboot,并且沒有對uboot執(zhí)行過clean。

6、進入到uboot的目錄中,編輯兩個sh文件,用于后續(xù)工作使用。

mkclean.sh,用于執(zhí)行clean操作:

#/bin/sh

make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm O=am335x distclean

上述執(zhí)行的命令,使用arm-linux-gnueabihf交叉編譯器,arm體系的CPU,輸出文件保存到./am335x目錄,執(zhí)行distclean清除所以之前的臨時文件。

mkboot.sh,用于執(zhí)行編譯操作:

#/bin/sh

make -j4 CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm O=am335x am335x_evm

上述執(zhí)行編譯uboot,其中-j4告訴編譯器使用4線程進行編譯,這個設置取決于計算機CPU的核心數(shù),能夠加快編譯的過程。

ARCH=arm指定目標CPU的體系架構。O=am335x指定文件輸出目錄為./am335x,編譯結束后,能夠在這個目錄下找到MLO,u-boot.img等文件。

am335x_evm選項告知編譯器使用這個板的配置對uboot進行編譯。

7、進入到kernel目錄中,編輯三個sh文件,用于后續(xù)編譯和安裝kernel:

mkcln.sh,用于執(zhí)行clean操作:

#/bin/sh

make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm distclean

make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm am335x_evm_defconfig

這個sh將進行清除臨時文件的操作,然后使用arm335x_evm_defconfig文件對kernel進行編譯配置。

mkkn.sh,用于執(zhí)行編譯操作:

#/bin/sh

make -j4 CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm uImage

make -j4 CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm modules

交叉編譯kernel并生成uImage文件。

交叉編譯可動態(tài)加載的modules。

mkins.sh,用于安裝kernel:

#/bin/sh

make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm modules_install INSTALL_MOD_PATH=/home/XXXX/nfs

cp ./arch/arm/boot/zImage /home/XXXX/nfs/boot

將編譯好的內核zImage和modules文件安裝到nfs文件目錄中。

在編譯完成后,在kernel/arch/arm/boot目錄下會生成uImage文件,這個是linux kernel可引導文件,需要將這個文件拷貝到nfs或者tftp目錄中。

8、編譯后的幾個重要文件:

編譯uboot將會生成2個重要文件,MLO和u-boot.img。其中MLO是第二次引導程序,am335x復位后,內部otp中的引導程序會啟動,然后根據LCD_DATA管腳的設置來加載指定存儲器上的MLO。

MLO運行后,將加載相應存儲器上的u-boot.img。

u-boot.img啟動后,將根據bootargs和bootcmd環(huán)境變量設置的參數(shù),選擇加載uImage,并啟動uImage。

uImage是kernel的可執(zhí)行內核鏡像文件。

9、開發(fā)嵌入式linux,需要將am335x通過串口和計算機連接,并使用計算機的超級終端 進行操作。ubuntu下的minicom比較好用。

現(xiàn)在的計算機一般都沒有標準的RS232接口,我自己設計了一塊CH340T的通信轉接板,一端連接am335x的UART0,另外一端接計算機的USB口,在芯恒的官網能夠下載到ubuntu的驅動程序,下載下來后insmod成功后,/dev下能夠看到ttyUSBX(X取決于計算機,一般為ttyUSB0)。

這樣使用USB模擬串口和am335x通信,方便使用。

下一篇將講述第一次啟動am335x。

標簽: 嵌入式linux USB

相關閱讀

枣庄市| 年辖:市辖区| 汉中市| 临颍县| 五指山市| 右玉县| 滨州市| 麻江县| 永春县| 阳江市| 高雄县| 东海县| 沂源县| 沂水县| 突泉县| 嘉定区| 凤台县| 嘉兴市| 鹤山市| 罗源县| 河北区| 于田县| 晋中市| 中江县| 兰考县| 仲巴县| 清新县| 民县| 宝坻区| 萨嘎县| 洪雅县| 浪卡子县| 同江市| 宁津县| 东乌珠穆沁旗| 拜泉县| 若羌县| 康平县| 维西| 贵港市| 丘北县|