ARM嵌入式開發(fā)環(huán)境搭建

之前寫過一篇類似環(huán)境搭建的文章扶歪,這篇做為優(yōu)化篇,為了對嵌入式開發(fā)一下段經歷的總結與方便下次使用撩匕,也為了傳播和學習害捕。

2017.11.8 小雨 廣州 我經過市民廣場沒有炸雞

手頭:Cortex-A8(53) 鄧工:溯源學習和總結

開發(fā)板選型:技術支持好,文檔規(guī)范,用的人多,性價比
高效率開發(fā)步驟:讀文檔熱身,配置改改,熟悉操作流程,再到細節(jié)把握
文檔參考:TI爛;瑞星/ON 一般;(瑞芯微的RK3368);三星風格舊

需求及學習目標:拿到開發(fā)板需要快速搭建開發(fā)環(huán)境,準備:硬件(核心板 底板 電源 屏幕 串口線 網線 SD卡 U盤 等等) 軟件(廠商提供的系統(tǒng)包 網上收集一些適合的 多多益善)
移植 http://zhangjungang2000.blog.163.com/blog/static/144004663201132251036101/
配置文件執(zhí)行順序 http://www.cnblogs.com/xd502djj/archive/2013/02/25/2932544.html

遠程控制開發(fā)板:編譯openssh到開發(fā)板(teamviewer vnc ssh)
開發(fā)板->ssh(蘇海龍 ssh)scp root@192.168.1. ssh root@192.168.1.210
板上ftp工具 ftpflash

常用壓縮命令

.tar.bz2
解壓:tar jxvf FileName.tar.bz2
壓縮:tar jcvf FileName.tar.bz2 DirName
tar.gz解壓
tar -xzvf .tar.gz

一.常用軟件

系統(tǒng) Fedora deepin limint

https://repo.fdzh.org/

VIM

格式化代碼
1绿淋,gg 跳轉到第一行
2,shift+v 轉到可視模式
3尝盼,shift+g 全選
4吞滞,按下神奇的 =

終端

①新建objcopy軟連接:sudo ln -s arm-none-linux-gnueabi-objcopy(源) arm-linux-objcopy

CMake與Make

https://blog.csdn.net/zhawk/article/details/74276175
linux編譯安裝Cmake :sudo ./bootstrap --prefix=/usr/local/
CMake 手冊詳解:https://www.cnblogs.com/coderfenghc/archive/2012/06/16/CMake_ch_01.html

secureCRT 串口傳輸

①輸入:1.rx 傳輸文件名;2.選擇傳輸-》發(fā)送Xmodem->選擇傳輸進來的文件;3.改變權限:chmod 777 文件名;4.運行:./文件名
②1.用yModem協(xié)議下載文件:rz -y 選擇ymodern模式傳輸后 loady 0x40000000//下載到內存0x40000000;2然后選擇yModem選擇文件

tftp

1.參數 不能傳文件夾 拷貝目錄 -r 《暗時間》
-g 表示下載文件 (get) -p 表示上傳文件 (put) -l 表示本地文件名 (local file) -r 表示遠程主機的文件名 (remote file)
開發(fā)板傳文件到其它:tftp -l 文件名 -p 目標IP
下載:tftp -l 文件名 -g 目標IP

TFTP基于UDP協(xié)議,如果環(huán)境中沒有TCP協(xié)議,是比較合適的裁赠;
ü TFTP執(zhí)行和代碼占用內存量比較械钅;
默認情況下佩捞,Linux內部是安裝了tftp服務器包的绞幌。但是默認是不啟動的
2.拓展 安裝兩法

①#### 1.PC機搭建一個TFTP服務器 -->共享目錄(led.bin)
1.1sudo vim /etc/inetd.conf
/srv/tftp
1.2 sudo mkdir /srv/tftp
sudo chmod 777 /srv/tftp
cp led.bin /srv/tftp // 把led.bin 放到/srv/tftp里面
1.3啟動tftp 服務器服務
sudo /etc/init.d/openbsd-inetd reload

目前成熟系統(tǒng)設計中,都將FTP協(xié)議和傳輸定性為非安全(登錄密碼)傳輸協(xié)議一忱。它和telnet登錄方式莲蜘,逐漸為SFTP和SSH協(xié)議所取代。在Linux流行版本中帘营,SFTP已經成為默認配置項目菇夸。
在Linux發(fā)行版的光盤中,已經包括了vsftp服務器安裝包仪吧,是需要手工安裝
默認情況下庄新,tftp服務器包是安裝上的,而FTP服務器沒有安裝 rpm -qa | grep ftp

nfs

haneWIN NFS服務器:windows下的NFS服務軟件
思考:開發(fā)板沒有服務端可以反向掛載到PC或上面的虛擬機嗎
開啟服務 (出處:http://www.linuxidc.com/Linux/2013-08/89154.htm
sudo /etc/init.d/portmap restart
sudo /etc/init.d/nfs-kernel-server restart
修改配置文件/etc/exports
11 /home/student/workdir/rootfs *(rw,sync,no_root_squash)
重啟nfs服務
sudo /etc/init.d/nfs-kernel-server restart
掛載命令
mount -t nfs 192.168.1.202:/home(源) /nfs(目的) -o nolock

sourceInsight

直接連電腦和開發(fā)板 開發(fā)板掛載u盤:fdisk -l查看U盤

mount -t ntfs(vfat) /dev/sda /mnt -o iocharset=utf8(gb2312)
mnt被掛壞了FAT bread U盤:read-only file system

二.環(huán)境搭建

刷系統(tǒng)(粵嵌)

usb線fastboot燒寫:
1.跳出一個分區(qū)頁表
2.問題驅動-fastboot下載驅動文件夾(或驅動精靈)
3.鏡像文件夾薯鼠,雙擊flash_bootloader.bat择诈,燒寫B(tài)ootLoader(燒寫時拔掉USB線斷電會變磚)
4.重啟再按下回車和u鍵進入fastboot燒寫
5.雙擊flash_kernel.bat,燒寫kernel
6.雙擊flash_system.bat出皇,燒寫system

常用調試/開發(fā)命令

修改文件權限sudo chmod 777 -R trunk/
killall -9 hemodialysis
umount -v /mnt/nfs/
掛載命令:mount -o nolock -t nfs 192.168.123.245:/work/nfs /mnt/nfs
拷貝:cp /mnt/nfs/hemodialysis/hemodialysis /usr/local/app/
cd /usr/local/app/
./hemodialysis -qws -T2&(T2不會重啟)

網絡設置 虛擬機&開發(fā)板

ping通自己 不會是網卡得問題 destination host unreachable(網絡出錯等級-內核相關?) interfaces文件詳細說明 http://blog.csdn.net/mountzf/article/details/52035499

0.網絡不通 最下方有配置網絡大全

①全部設置好卻發(fā)現上不了網-先測試網關能不能ping通羞芍,114通不通(注意gateway不要寫錯);
②無法識別網絡可能跟網卡無線WiFi有關(后面加了sudo route add default gw 192.168.1.1 sudo /etc/init.d/networking restart可以了)
③橋接模式 nat模式 主機模式 區(qū)別http://jingyan.baidu.com/article/3f16e003cd0a0d2591c103b4.html

設置環(huán)境變量

編輯.bash_profile郊艘,找到export PATH=這些行荷科,在這些行的后面添加:/root/cmake/bin,從而設置環(huán)境變量

安裝/更新軟件

掛載共享文件夾 sudo mount -t vboxsf 共享文件夾名字(不用路徑) /mnt/Share
Some index files failed to download. They have been ignored...
解決:軟件和更新里把獨立軟件源去掉纱注,然后刪除緩存畏浆,在刷新一下就可以了。 sudo rm -vfr /var/lib/apt/lists/* 狞贱,如果還是不行刻获,那就更換軟件源

1,虛擬機配置:
player-》管理-》虛擬機設置-》網絡適配器-》橋接模式
無論如何上不了網(ping網關不通):重置虛擬機網卡

2瞎嬉,獲取root權限

3蝎毡,更改網絡配置文件
vi /etc/network/interfaces
4,改成DNS
vi /etc/resolvconf/resolv.conf.d/base

5氧枣,重啟網卡(最快方式重新開機)
reboot 直接重啟

6沐兵,如果你的網絡通過上面的配置不成,你可以檢查一下地點
ifconfig來查看你的IP地址設置有沒有起效

vi /etc/resolv.conf
    查看有沒有nameserver 202.96.128.33
    如果沒有你就運行dhclient

檢查windows的網絡適配器便监,看看VM的兩個網卡有沒有被禁用扎谎,需要啟動這兩個網卡
1.安裝源

1.source.list源 (etc/apt/下)http://www.360doc.com/content/14/0914/09/10072361_409316956.shtml#
163:http://mirrors.163.com/ubuntu
aliyun:http://mirrors.aliyun.com/ubuntu
2.安裝時出現Depends: libbrasero-media3-dev (>= 3.0) but it is not going to be installed (apt-get install gnome-core-devel)System --> Administration --> Update Manager --> Settings --> Updates 中勾選 apt-get update

2.配置文件

1.Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
解決:sudo vim /etc/resolv.conf 添加nameserver 8.8.8.8
2.etc/network/interfaces修改IP

3.netstat測網

netstat判斷UDP端口開啟:netstat -nlp | grep udp

常用工具包安裝
安裝m4
wget [http://mirrors.kernel.org/gnu/m4/m4-1.4.13.tar.gz]
 tar -xzvf m4-1.4.13.tar.gz
cd m4-1.4.13 \
 ./configure --prefix=/usr/local
 make 
 make install

安裝autoconf
wget [http://mirrors.kernel.org/gnu/autoconf/autoconf-2.65.tar.gz](http://mirrors.kernel.org/gnu/autoconf/autoconf-2.65.tar.gz) \ && tar -xzvf autoconf-2.65.tar.gz \ && cd autoconf-2.65 \ && ./configure --prefix=/usr/local make && make install
安裝automake
wget [http://mirrors.kernel.org/gnu/automake/automake-1.11.tar.gz](http://mirrors.kernel.org/gnu/automake/automake-1.11.tar.gz) \ && tar xzvf automake-1.11.tar.gz \ && cd automake-1.11 \ && ./configure --prefix=/usr/local make && make install
安裝libtool
wget [http://mirrors.kernel.org/gnu/libtool/libtool-2.2.6b.tar.gz](http://mirrors.kernel.org/gnu/libtool/libtool-2.2.6b.tar.gz) \ && tar xzvf libtool-2.2.6b.tar.gz \ && cd libtool-2.2.6b \ && ./configure --prefix=/usr/local make && make install

環(huán)境變量 自動運行etc/init.d/rcS etc/profile upiot.sh

區(qū)別:系統(tǒng)(謹慎操作)/etc/bash.bashrc;
進入用戶目錄下的.bashrc:sudo vim ~/.bashrc;/etc/profile


問題:
①默認情況下看不得,.bashrc屬于隱藏文件,用“l(fā)s -l -a”可以查看簿透;
②頭文件加入系統(tǒng)環(huán)境變量:/usr/include放頭文件
http://blog.chinaunix.net/uid-27105712-id-3270102.html
兩種方法:
①上面的bashrc文件里最后輸入你想要聲明的環(huán)境變量
例如:export PATH=/usr/local/arm/arm-2009q3/bin:$PATH(這是配置交叉工具鏈:之前還要tar xzvf arm-2009q3.tar.gz先->[-C ~//解壓到指定目錄])生效:每次修改.bashrc后移袍,使用source ~/.bashrc(或者 . ~/.bashrc)就可以立刻加載修改后的設置,使之生效老充;系統(tǒng)的要重啟葡盗,用戶的要注銷才能生效

編譯與調試

1.CMake構建套件
詳細介紹與說明:https://blog.csdn.net/appleml/article/details/52829412 (引用)
2.沒有arm-linux-gcc工具解決方法:
1、切換為root用戶 ;2啡浊、gedit /etc/bash.bashrc(這是系統(tǒng)環(huán)境變量,用戶的~/.bashrc) 在最下面一行添加 export PATH=PATH:/usr/local/arm/bin(使能工具鏈,又例:export PATH=/usr/local/arm/arm-2009q3/bin:PATH) ; 3觅够、source /etc/bash.bashrc

0.編譯位數與結構體求長例子
機器位數與編譯位數是否對變量影響.png
1.gcc編譯

編譯生成可執(zhí)行代碼總共分四個步驟:預處理--》編譯--》匯編--》鏈接
gcc main.c add.c -o main //多文件
預處理:gcc hello.c -E -o yuchuli //作用:處理預處理命令,將include define內容解釋出來
編譯:gcc hello.c -S -o bianyi //作用:檢查語法錯誤巷嚣,翻譯成匯編語言
匯編:gcc hello.c -c -o huibian //作用:匯編語言變成機器指令
鏈接:gcc hello.c -o hello //作用:把可重載的文件或者庫文件鏈接喘先,生成可以執(zhí)行代碼;可執(zhí)行文件運行:./hello
*.c->.o->->->.elf
相關參數:-E;-Wall警告;
例:gcc hello.c -o hello;//-o:指定生成后面的文件(不可變)


庫文件(動:運行時加載廷粒;靜:編譯時就叫進去->用四方圖描述有缺點)

修復軟連接丟失

“arm-linux-objcopy: Command not found”窘拯,原因在于這個工具的軟鏈接沒有新建,解決辦法:
在對應的交叉編譯器目錄當中新建該工具的軟鏈接坝茎。

gec@ubuntu:/mnt/hgfs/share/led1$ which arm-linux-gcc
/usr/local/arm/bin/arm-linux-gcc

gec@ubuntu:/usr/local/arm/bin$ sudo ln -s arm-none-linux-gnueabi-objcopy arm-linux-objcopy

2.gdb調試

使用教程:https://blog.csdn.net/zdy0_2004/article/details/80102076
編譯時要加上-g選項涤姊,生成的可執(zhí)行文件才能用gdb進行源碼級調試
gcc -g main.c -o main //退出GDB:quit或者Ctrl+d
①可以直接按下回車再次執(zhí)行最近執(zhí)行過的那條命令;
②分屏顯示源代碼:gdb -tui嗤放;generate-core-file
③bt顯示棧信息 思喊;無法產生core:ulimit -a 自動生成core文件:ulimit -c unlimited
例子

  1. 安裝好gdb,然后使用命令 'gdb'次酌。(假設需要調試的進程號為 21509)
  2. 使用 ‘attach 21590’命令將gdb附加到進程21509上恨课。
  3. 使用‘gcore core_name’命令生成coredump文件core_name。
  4. 使用‘detach’命令斷開連接岳服;使用‘q’命令退出gdb剂公。
3.等級優(yōu)化(主要-O0和-O2)

意義和區(qū)別:影響代碼(看反匯編代碼)
例:測試delay函數。
void delay(void)
{
int i=0x100000;
while(i--);
}

4.靜動態(tài)庫的生成與使用

1派阱,靜態(tài)庫生成:
將需要生成的.c文件生成.o文件
gcc -c *.c
結合所有.o文件生成需要生成的靜態(tài)庫文件
ar -r libprint.a(庫名) *.o

2诬留,動態(tài)庫的生成:
將需要生成的.c文件生成PIC格式的.o文件
gcc -fPIC -c *.c

結合所有的.o文件生成動態(tài)庫
    使用鏈接器:
        ld *.o -Bshare -o libprint.so

    也可以直接使用
        gcc *.o -shared -o libprint.so 

3斜纪,庫的使用(需要分開編譯贫母,注意源文件注釋)
庫的名字要求:
必須以lib開頭,.so(動態(tài)庫)或者.a(靜態(tài)庫)作為結尾
libprint.so 動態(tài)庫
libprint.a 靜態(tài)庫

動態(tài)庫編譯
    gcc C文件 -o 程序名字 -L 庫的路徑(/lib/) -l 庫的名字(去掉lib及.so所剩下的內容)
        注意:
            此條編譯命令會優(yōu)先尋找動態(tài)庫盒刚,如果找不到動態(tài)庫則用靜態(tài)庫編譯腺劣,如果都找不到就報錯了

靜態(tài)庫編譯
    gcc C文件 -static -o 程序名字 -L 庫的路徑 -l 庫的名字(去掉lib及.so所剩下的內容)
        注意:
            這里是將所有的庫文件都使用靜態(tài)編譯

4.如何同時編譯多個庫,反編譯 object

9.jpg

接上 網絡配置大全

配置流程:
1.配置IP因块、子網掩碼和網關(sudo vim /etc/network/interfaces)
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static(dhcp)
address 192.168.1.191
gateway 192.168.1.1
netmask 255.255.255.0

2.DNS 設置文件(sudo vim /etc/resolv.conf文件重啟不影響)

Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)

DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

nameserver 202.96.134.33

  • /etc/resolvconf/resolv.conf.d/base(文件重啟不影響)

  •   domain localdomain
    
  • search localdomain

  • nameserver 202.96.134.33 (128.86)

  • nameserver 202.96.128.68

  • nameserver 8.8.8.8

  • rolvconf -u

3.重新加載網絡配置信息:sudo /etc/init.d/networking force-reload

  • sudo service networking restart
    4.重新啟動網絡服務:sudo /etc/init.d/networking restart
    5.如果還不行橘原,手工添加你的默認網關地址:sudo route add default gw 192.168.1.1,然后重復第3/4步。
    6.如果還不行趾断,那么可以考慮更換一個虛擬網卡拒名。

Github:https://github.com/kjiawei/smartHome

【喵叫瘦星人】,一只有溫度的寄生獸
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市芋酌,隨后出現的幾起案子增显,更是在濱河造成了極大的恐慌,老刑警劉巖脐帝,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件同云,死亡現場離奇詭異,居然都是意外死亡堵腹,警方通過查閱死者的電腦和手機炸站,發(fā)現死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疚顷,“玉大人旱易,你說我怎么就攤上這事⊥鹊蹋” “怎么了咒唆?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長释液。 經常有香客問我全释,道長,這世上最難降的妖魔是什么误债? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任浸船,我火速辦了婚禮,結果婚禮上寝蹈,老公的妹妹穿的比我還像新娘李命。我一直安慰自己,他們只是感情好箫老,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布封字。 她就那樣靜靜地躺著,像睡著了一般耍鬓。 火紅的嫁衣襯著肌膚如雪阔籽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天牲蜀,我揣著相機與錄音笆制,去河邊找鬼。 笑死涣达,一個胖子當著我的面吹牛在辆,可吹牛的內容都是我干的证薇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼匆篓,長吁一口氣:“原來是場噩夢啊……” “哼浑度!你這毒婦竟也來了?” 一聲冷哼從身側響起鸦概,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤俺泣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后完残,有當地人在樹林里發(fā)現了一具尸體伏钠,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年谨设,在試婚紗的時候發(fā)現自己被綠了熟掂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡扎拣,死狀恐怖赴肚,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情二蓝,我是刑警寧澤誉券,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站刊愚,受9級特大地震影響踊跟,放射性物質發(fā)生泄漏。R本人自食惡果不足惜鸥诽,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一商玫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧牡借,春花似錦拳昌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碴里,卻和暖如春沈矿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背并闲。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工细睡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人帝火。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓溜徙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親犀填。 傳聞我的和親對象是個殘疾皇子蠢壹,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容