嵌入式學習筆記

2021-06-07 18:02:01 字數 4427 閱讀 1521

嵌入式系統定義 技術角度以應用為中心,以計算機技術為基礎,軟硬體可裁剪,應用系統對功能,可靠性,成本,體積,功耗,和應用環境有特殊要求的專用計算機系統系統角度 設計完成複雜功能的硬體和軟體並使其緊密契合在一起的計算機系統

實時在規定的時間內,完成規定的動作

紅帽linux 基本命令

ls 檢視當前目錄的內容

clear 清屏

mkdir xx 建立某個目錄

cd 進入某個目錄

cd ..返回上層

cd ../..返回根目錄

rmdir xx 刪除目錄(目錄為空的情況下)

rm -rf xx 強制刪除目錄

rm -f xx.x 檔案刪除

ifconfig 顯示本機網絡卡資訊

ifconfig xx(網絡卡名) xx.xx.xx.xx 修改ip位址

cp xx.x /xx 拷貝當前目錄下某個檔案到指定目錄下

cp -r xx /xx 拷貝目錄到某個目錄下

mv xx cc 重新命名

mv xx /home/ 把xx移到某個目錄下(剪下)

tar -xvzf xx -c /.../..../或.(.到當前目錄)

x 解壓縮

v 顯示檔名

z 使用 gzip 壓縮解壓縮

f 基於檔案

r4 可讀 w2 寫 x1 執行

s或s(suid,set uid):可執行的檔案搭配這個許可權,便能得到特權,任意訪問該檔案的所有者能使用的全部系統資源。請注意具備suid許可權的檔案,黑客經常利用這種許可權,以suid配上root帳號擁有者,無聲無息地在系統中開扇後門,供日後進出使用。

t或t(sticky):/tmp和 /var/tmp目錄供所有使用者暫時訪問檔案,亦即每位使用者皆擁有完整的許可權進入該目錄,去瀏覽、刪除和移動檔案。

chmod xx 744

vim a.c b.c c.c 同時開啟多個檔案

i插入模式 esc退出 shift+:進入命令模式 在命令模式下,n上乙個檔案,n下乙個檔案,rew從第乙個開始 wq儲存並退出

yy 複製 p黏貼 dd刪除 u撤銷

gedit xx.c

gcc xx.c

./a.out 執行

vim 跳到指定行 命令模式下 :15 (就到15行)

linux下程式在連線過程中做了什麼

符號解析和重定位

c語言中什麼是段錯誤,用gdb怎麼除錯

記憶體越界直接執行錯誤後給出錯誤的行數

如何自動生成makefile檔案

靜態庫和動態庫

接靜態庫其實從某種意義上來說只不過它操作的物件是目標**而不是原始碼而已。因為靜態庫被鏈結後庫就直接嵌入可執行檔案中了,這樣就帶來了兩個問題。

(1)首先就是系統空間被浪費了。這是顯而易見的,想象一下,如果多個程式鏈結了同乙個庫,則每乙個生成的可執行檔案就都會有乙個庫的副本,必然會浪費系統空間。

(2)再者,一旦發現了庫中有bug,挽救起來就比較麻煩了。必須一一把鏈結該庫的程式找出來,然後重新編譯。

而動態庫的出現正彌補了靜態庫的以上弊端。因為動態庫是在程式執行時被鏈結的,所以磁碟上只須保留乙份副本,因此節約了磁碟空間。如果發現了bug或要公升級也很簡單,只要用新的庫把原來的替換掉就行了。

但是靜態庫也有自己的優點:

編譯後的執行程式不需要外部的函式庫支援,因為所有使用的函式都已經被編譯進去了。

靜態庫的名字一般是lib***.a(linux)

動態庫的名字一般是lib***.so (linux),有時候也是 lib***.so.major.minor,***x是該lib的名稱,major是主版本號, minor是副版本號

linux系統有幾個重要的目錄存放相應的函式庫,如/lib /usr/lib

當天筆記

源程式->預處理(標頭檔案載入巨集替換)->->鏈結->可執行

gcc -o 生成的可執行檔名 xx.c/ xx.c -o生成的可執行檔名

gcc -e xx.c > xx.i 只進行預處理 檢查巨集是否正常替換

gcc -c hello.c 編譯生成.o檔案

-s 彙編 -s小寫的話生成可執行a.out不生成.s檔案

-o(大寫) -> time -o/o2 ./執行檔案 優化執行時間 測試

gcc -wall *.c -o main 提示警告資訊

-w 關閉警告

-o2gcc -c *.c 萬用字元 編譯當前目錄下所有的.c檔案

gdb 功能 1啟動被除錯程式 2.斷點除錯 3檢視停止時的程式狀態、變數值

gcc -g(使用時必須加g)xx.c -o cc

gdb cc

(gdb) run

(gdb) break 15 執行到**的15行之後進行除錯

list 檢視程式

next 單步執行 step 單步但進入子程式

print 變數名

continue 結束除錯執行完程式

q 結束退出

載入標頭檔案用 "" <>的 區別前者先在當前目錄找,找不到到指定目錄找 後者只在指定目錄找

現有main函式呼叫了add函式 add.h在當前目錄或其他目錄

gcc main.c add.c -i ../其他目錄

系統的庫檔案位置 cd/usr/include/ 下 如果在main函式中呼叫sin函式用到了math.h

gcc main.c -lm 這裡的m為 libm.so 是系統的動態庫檔案

動態庫 執行時才鏈結 靜態庫 執行前加入,如果庫檔案改變功能,程式執行結果卻不變,難以公升級

靜態庫建立

ar rcs 庫名 xx cc vv

rc 靜態庫不存在就建立 s 更新庫檔案

gcc main.c -l庫檔名 -l. 當前目錄 -l../ 上層

動態庫的建立

gcc -shared -fpic -o 庫名.so cc zz dd

gcc main.c ./libxx.so -o 可執行檔名

巨集定義debug在程式除錯中的初級用法

1 #define __debug__

2 #ifndef __debug__

3 #define debug_msg(fmt, args...)

4 #else

5 #define debug_msg(fmt, args...) printf(fmt, ##args)

6 #endif

例1 #include

2 #include"debug.h"

3 int main()

4 程式管理器 makefile

vim makefile或makefile 或其他名稱

make -f xx/xx clean

例1 obj=add.o main.o sub.o div.o mul.o

2 main:$(obj)

3 gcc -o main $(obj)

4 $(obj):add.c sub.c main.c div.c mul.c

5 gcc -c *.c

6 .phone:clean

7 clean:

8 rm -f main.o add.o sub.o div.o mul.o main

什麼是系統預設的shell

預設的shell就是預設的shell,你建立乙個賬戶是系統缺省會給你分配乙個shell,linux下是bash,bsd下是csh,這個就是預設的shell,當然你可以自己修改;

檢視你的系統安裝的shell

$ls -l /bin/*sh

修改shell:

$chsh shell

或者修改/etc/passwd 的最後一項

aix 下是korn shell.

solaris預設的是bourne shell.

freebsd預設的是c shell

hp-ux預設的是posix shell.

linux是bourne again shell.

linux中的shell有多種型別,其中最常用的幾種是bourne shell(sh)、c shell(csh)和korn shell(ksh)。三種shell各有優缺點。

bourne shell是unix最初使用的shell,並且在每種unix上都可以使用。bourne shell在shell程式設計方面相當優秀,但在處理與使用者的互動方面做得不如其他幾種shell。

posix shell

posix shell 是korn shell的乙個變種. 當前提供posix shell的最大賣主是hewlett-packard。在hp-ux 11.0 , posix shell 就是/bin/sh,而bsh是/usr/old/bin/sh.

tcsh shell不同於其他的shell,因為控制結構更符合程式語言的格式。例如tcsh 的test條件的控制結構是表示式,而不是linux命令,得到的值是邏輯值true或false,tcsh的表示式與c語言中的表示式基本相同。

嵌入式學習筆記

1 3 買了兩本書鳥哥的 鳥哥的linux私房菜基礎學習篇 第三版 和偉山東的 嵌入式linux應用開發完全手 冊 暫時看不懂 4 看了王剛的 linux系統移植 第二版 實現了windows和linux虛擬機器的檔案的共享 2014 11 02 主機可以ping通虛擬機器,虛擬機器ping不通主機...

嵌入式學習筆記1

1.終端 ubuntu自帶終端terminal 終端提示符 fs ubuntu 使用者名稱 主機名 目錄 whoami hostname pwd 普通使用者提示符 超級使用者提示符 root 2.常用命令提示符 ls 列出資料夾內容 ls ls ls 資料夾名 ls home fs 61018 ls...

嵌入式學習筆記 uboot

1 linux啟動方式比較 一上電pc linux 嵌入式系統 bios硬碟讀入核心 boot loader 最終目的是啟動核心,有很多種,我用的是uboot 從flash讀出核心,放到sdram中 引導作業系統windows 引導核心 識別c,d盤 掛接根檔案系統 執行應用程式qq等 應用程式 2...