讓自己網速快起來你可以 自己在系統中設置 步驟我給你寫出來
單擊“開始→運行”命令,輸入“gpedit.msc”後回車,運行“組策略”程序,
依次展開“計算機配置→管理模板→網絡→Qos數據包調度程序”,在右側的
窗口中雙擊“限制可保留帶寬”項,打開“限制可保留帶寬屬性”對話框,
選擇“已啓用”選項,然後在“帶寬限制”中把數值設爲“0”即可一起用一
個..不要用軟件封別人了.似乎很不好 :)
win調用記事本 notepad
計算器 calc
畫圖工具 mspaint
*********************************************
#define EV_SYN 0x00
#define EV_KEY 0x01 //按鍵
#define EV_REL 0x02 //相對座標(軌跡球)
#define EV_ABS 0x03 //絕對座標
#define EV_MSC 0x04 //其他
#define EV_SW 0x05
#define EV_LED 0x11 //LED
#define EV_SND 0x12//聲音
#define EV_REP 0x14//repeat
#define EV_FF 0x15
#define EV_PWR 0x16
#define EV_FF_STATUS 0x17
#define EV_MAX 0x1f
#define EV_CNT (EV_MAX+1)
*********************************************
vi 取消撤銷命令 ctrl + r
產品經理常用的三款軟件:
用於思維分析的 mindmanager
用於快速建立演示界面的Axure
快速構建3D模型的Google sketchup3D
python -m SimpleHTTPServer
共享網絡文件
******************************* 高端內存 *******************************************
Linux 把內核地址空間(0xc0000000 -- 0xfffffffff)劃分爲
DMA區 NORMAL區 高端內存區
16M 16M - 896M 剩下的128M
對於超過1G物理內存的RAM ,內核無法訪問,就藉助128M的高端內存訪問,
比如訪問 0x4000000 - 0x40010000 間的物理 1M 空間,就先在高端空間尋找空閒的 1M 地址
然後把此地址映射到物理地址上,這樣就可以訪問高於1G的內存了;
*****************************************************************************
sed -i "s/123/234/g" main.c //在命令中把mian.c裏面的123替換成234
環境變量格式:
export PATH="/opt/STM/STLinux-2.3/devkit/sh4/bin:$PATH"
vi實現多行的空格縮進;
:n,m,s/^/ /g
其中n代表從n行開始
m代表到m行結束
g前面的空格爲要縮進的空格個數;
或者直接 v 幾行,之後 <
****************************************************************
svn update -r 200 test.php 更新某文件到一個版本
svn diff -r 200:201 test.php 比較兩文件的差異性
svn log|less log信息從頂部向下顯示,less是正續顯示;
svn ci -m "註釋信息" 文件
****************************************************************
在瀏覽器上輸入 file:///F:/工作資料
就可以打開本地F盤的工作資料 目錄
dmesg 顯示內核開機信息,也可以用來查看usb插入之後的信息
dmesg |grep usb
cat /proc/kmsg &
vi 一下波浪線代表把當前小寫變大寫,大寫變小寫
**********************************************************************************************
3. 遍歷文件夾grep一個字符串
find . -name "*c" | xargs grep "strings"
在當前文件夾下所有c文件中查找字符串“string”
要麼直接 grep -inR \string /文件路徑
************************************************
ubunt 快捷鍵使用
ctrl + L 代表clear命令
ctrl + D 代表返回桌面命令,此命令要自己設置 /seting/keyboard/shortcut...
************************************************
/mnt # time cp /tmp/sd2/sd1/\[Andorid開發視頻教學\]01_27_項目功能分4 ./
real 0m 2.20s
user 0m 0.03s
sys 0m 1.07s
***********************************************
ubuntu解壓命令全覽
.tar
解包:tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
注:tar是打包,不是壓縮!
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.gz
解壓1:gunzip FileName.gz
解壓2:gzip -d FileName.gz
壓縮:gzip FileName
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.tar.gz 和 .tgz
解壓:tar zxvf FileName.tar.gz
壓縮:tar zcvf FileName.tar.gz DirName
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.bz2
解壓1:bzip2 -d FileName.bz2
解壓2:bunzip2 FileName.bz2
壓縮: bzip2 -z FileName
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.tar.bz2
解壓:tar jxvf FileName.tar.bz2
壓縮:tar jcvf FileName.tar.bz2 DirName
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.bz
解壓1:bzip2 -d FileName.bz
解壓2:bunzip2 FileName.bz
壓縮:未知
.tar.bz
解壓:tar jxvf FileName.tar.bz
壓縮:未知
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.Z
解壓:uncompress FileName.Z
壓縮:compress FileName
.tar.Z
解壓:tar Zxvf FileName.tar.Z
壓縮:tar Zcvf FileName.tar.Z DirName
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.zip
解壓:unzip FileName.zip
壓縮:zip FileName.zip DirName
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.rar
解壓:rar x FileName.rar
壓縮:rar a FileName.rar DirName
rar請到:http://www.rarsoft.com/download.htm 下載!
解壓後請將rar_static拷貝到/usr/bin目錄(其他由$PATH環境變量指定的目錄也可以):
[root@www2 tmp]# cp rar_static /usr/bin/rar
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.lha
解壓:lha -e FileName.lha
壓縮:lha -a FileName.lha FileName
lha請到:http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/下載!
>解壓後請將lha拷貝到/usr/bin目錄(其他由$PATH環境變量指定的目錄也可以):
[root@www2 tmp]# cp lha /usr/bin/
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.rpm
解包:rpm2cpio FileName.rpm | cpio -div
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~
.deb
解包:ar p FileName.deb data.tar.gz | tar zxf -
~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.~.
tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
解壓:sEx x FileName.*壓縮:sEx a FileName.* FileName
***********************************************************************************************
************************************************************************
通常我們會在.vimrc中設置縮進,不過編輯源代碼的時候粘貼就出問題了,粘貼的代碼每行會多一次縮進,結果就面目全非了,解決方法是先設置爲粘貼模式:
:set paste
內核中字符串的拼接
char name[20];
sprintf(name,"empty%d",i);字符串拼接;
dd命令是linux下非常有用的一個命令,作用就是用指定大小的塊拷貝一個文件,並在拷貝的同時進行指定的轉換
vim在兩個大括號之間的跳轉,% ,在括號位置按%;
D 表示刪除光標後面的所有字符,直至一行結尾處;
************************************************************************
DMA申請和使用的所有筆記
內存中用於與外設交互數據的一塊區域被稱做DMA緩衝區,在設備不支持scatter/gather CSG,
分散/聚集操作的情況下,DMA緩衝區必須是物理上連續的。
在分配內存時,系統會盡量給我們分配連續的物理內存,這樣有什麼好處呢?我知道的有如下2條:
1、DMA不使用頁表機制,因此必須分配連續的物理內存。
2、使用連續物理內存可以提高系統整體性能。
申請DMA設備
像使用中斷一樣,在使用DMA之前,設備驅動程序需要首先向系統申請DMA通道,
申請DMA通道的函數如下:
int request_dma(unsigned int dmanr, const char * device_id);
同樣的,設備結構體指針可作爲傳入device_id的最佳參數。
使用完DMA通道後,應該使用如下函數釋放該通道:
void free_dma(unsinged int dmanr);
DMA映射
DMA映射包括兩個方面的工作:分配一片DMA緩衝區;爲這片緩衝區產生設備可訪問的地址
。結合前面所講的,DMA映射必須考慮Cache一致性問題。
Cache的一致性就是指Cache中的數據,與對應的內存中的數據是一致的。
內核中提供了以下函數用於分配一個DMA一致性的內存區域:
void *dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp);
以下函數用於分配一個寫合併(writecombinbing)的DMA緩衝區:
void *dma_alloc_writecombine(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp);
流式DMA映射(單物理地址連續的緩衝區)
對於單個已經分配的緩衝區而言,使用dma_map_single()可實現流式DMA映射:
dma_addr_t dma_map_single(struct device *dev, void *buffer, size_t size, enum dma_data_direction direction);
如果映射成功,返回的是總線地址,否則返回NULL.最後一個參數DMA的方向,可能取DMA_TO_DEVICE, DMA_FORM_DEVICE, DMA_BIDIRECTIONAL和DMA_NONE;
與之對應的反函數是:void dma_unmap_single(struct device *dev,dma_addr_t *dma_addrp,size_t size,enum dma_data_direction direction);
驅動訪問流式DMA映射
通常情況下,設備驅動不應該訪問unmap()的流式DMA緩衝區,如果確實要訪問的話,就使用下面的函數操作
這時可先使用如下函數獲得DMA緩衝區的擁有權:
void dma_sync_single_for_cpu(struct device *dev,dma_handle_t bus_addr, size_t size, enum dma_data_direction direction);
在驅動訪問完DMA緩衝區後,應該將其所有權還給設備,通過下面的函數:
void dma_sync_single_for_device(struct device *dev,dma_handle_t bus_addr, size_t size, enum dma_data_direction direction);
基於分散/聚集的DMA緩衝區映射(物理地址不連續的多緩衝區)
如果設備要求較大的DMA緩衝區,在其支持SG模式的情況下,申請多個不連續的、相對較小的DMA
緩衝區通常是防止申請太大的連續物理空間的方法。在Linux內核中,使用如下函數映射SG:
int dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
enum dma_data_direction direction);
nents是散列表(scatterlist)入口的數量,該函數的返回值是DMA緩衝區的數量,可能小於nents。對
於scatterlist中的每個項目,dma_map_sg()爲設備產生恰當的總線地址,它會合並物理上臨近的內存區域。
scatterlist結構體的定義如代碼清單11.18所示,它包含了scatterlist對應的page結構體指針、緩衝區
在page中的偏移(offset)、緩衝區長度(length)以及總線地址(dma_address)。
執行dma_map_sg()後,通過sg_dma_address()可返回scatterlist對應緩衝區的總線地址,sg_dma_len()
可返回scatterlist對應緩衝區的長度
如果設備驅動一定要訪問映射情況下的SG緩衝區,應該先調用如下函數:
int dma_sync_sg_for_cpu(struct device *dev,struct scatterlist *sg, int nents,enum dma_data_direction direction);
訪問完後,通過下列函數將所有權返回給設備:
int dma_map_device(struct device *dev,struct scatterlist *sg, int nents,enum dma_data_direction direction);
***********************************************************************
copy_from_user((void *)&bl_val, (const void *)arg, sizeof(unsigned long));
copy_to_user((void *)arg, (const void *)&bl_val, sizeof(unsigned long));
******************************** shell *****************************
ln的鏈接又軟鏈接和硬鏈接兩種,軟鏈接就是ln -s ** **,它只會在你選定的位置上生成一個文件的鏡像,
不會佔用磁盤空間,硬鏈接ln ** **,沒有參數-s, 它會在你選定的位置上生成一個和源文件大小相同的文件,
無論是軟鏈接還是硬鏈接,文件都保持同步變化。軟鏈接是可以跨分區的,但是硬鏈接只能在同一分區內
**********************************************************************
Linux內核結構體
struct file
file_operatiorn f_op; //操作函數接口
mode_t f_mode; //讀寫模式
void* private_data; //私有數據指針
unsigned int f_flags; //阻塞與非阻塞
struct inode // inode包含文件訪問權限、屬主、組、大小、生成時間、訪問時間、最後修改時間等信息
struct block_device* i_bdev;
struct cdev* c_dev;
struct cdev
struct module *owner;
const struct file_operations *ops;
struct list_head list;
dev_t dev;
unsigned int count;
struct device
struct semaphore sem;
struct bus_type * bus;
void *driver_data; /* data private to the driver */
void *platform_data; /* Platform specific data, device
struct class *class;
***************************************************************************************************
*************************************************
find / -amin -10 # 查找在系統中最後10分鐘訪問的文件
*************************************************
*************************************************
int main(int argc,char** argv){
char str[10];
strcpy(str,argv[1]); //字符的輸入拷貝
int value;
value = strtoul(argv[2],NULL,0); //數字的輸入拷貝
}
./a.out score 100
打印 參數二(字符串) 參數三(數字)
**************************************************
fflush(stdout)當然是清空stdout的緩衝區了
就是有輸出就直接輸出,不會積累到緩衝區滿了再輸出
你可以試試下面的代碼
int i;
for (i=0;i<10;i++)
{
printf("%d",i);
// fflush(stdout);
sleep(1);
}
再去掉註釋試試就知道了
一般就是在輸出打印之後加上fflush函數;
**************************************
********************** poll 的實現 **************************
poll的實現是基於等待隊列的(睡眠與喚醒,得不到數據而睡眠),但是與一般等待隊列的使用方法是不一樣的,
poll的實現只要定義等待隊列頭就可以了,不需要定義等待隊列
1)定義
wait_queue_head_t poll_wait_queue;
2)初始化等待隊列頭
init_waitqueue_head(&g_innov_notifier_priv.poll_wait_queue);
3)在poll函數裏實現
poll_wait(filp, &g_innov_notifier_priv.poll_wait_queue, poll_table);
4)在中斷裏喚醒
wake_up_interruptible(&g_innov_notifier_priv.poll_wait_queue);
**************************************************************
********************* 等待隊列的一般用法 *********************
1) 定義和初始化等待隊列頭
wait_queue_head_t wqh;//定義等待隊列頭類型變量
init_waitqueue_head(wait_queue_head_t *wqh);//初始化等待隊列頭
DECLARE_WAIT_QUEUE_HEAD(name);//定義並初始化等待隊列頭
2) 定義和初始化等待隊列
DECLARE_WAITQUEUE(name,task);//定義並初始化一個名爲name的等待隊列,task通常被設置爲代表當前進程的current指針。
3) 添加/移除等待隊列
add_wait_queue(wait_queue_head_t *q,wait_queue_t wait);
remove_wait_queue(wait_queue_head_t *q,wait_queue_t *wait);
前者是將等待隊列wait添加到等待隊列頭q指向的等待隊列數據鏈中,後者從中移除。
4) 等待事件
wait_event(queue,condition);//當condition爲真時,立即返回;否則進程進入TASK_UNINTERRUPTIBLE類型的睡眠狀態,並掛在queue指定的等待隊列數據鏈上。
wait_event_interruptible(queue,condition);//當condition爲真時,立即返回;否則進程進入TASK_INTERRUPTIBLE類型的睡眠狀態,並掛在queue指定的等待隊列數據鏈上。
wait_event_killable(queue,condition);//當condition爲真時,立即返回;否則進程進入TASK_KILLABLE類型的睡眠狀態,並掛在queue指定的等待隊列數據鏈上。
wait_event_timeout(queue,condition);//當condition爲真時,立即返回;否則進程進入TASK_UNINTERRUPTIBLE類型的睡眠狀態,並掛在queue指定的等待隊列數據鏈上;當阻塞時間timeout超時後,立即返回。
wait_event_interruptible_timeout(queue,condition);//當condition爲真時,立即返回;否則進程進入TASK_INTERRUPTIBLE類型的睡眠狀態,並掛在queue指定的等待隊列數據鏈上;當阻塞時間timeout超時後,立即返回。
5) 喚醒隊列
wake_up(wait_queue_head_t *queue);//喚醒由queue指向的隊列數據鏈中的所有睡眠類型的等待進程。
wake_up_interruptible(wait_queue_head_t *queue);//喚醒由queue指向的隊列數據鏈中的所有睡眠類型爲TASK_INTERRUPTIBLE的等待進程。
*******************************************************************************
********************************** 三層內存的物理申請 *************************
*** #define TCC_MEM_SIZE " mem=422M"
#define TCC_VPU_SIZE 56
#else
/arch/arm/kernel/setup.c
char *tcc_mem_size = TCC_MEM_SIZE;
strcat(default_command_line, tcc_mem_size);
等價於 strcat(default_command_line, mem=422M ); 這樣就預留了(512-422)M空間地址;
在Linux內核引導時,傳入參數“mem=size”保留頂部的內存區間。比如系統有256MB內 存,
參數“mem=248M”會預留頂部的8MB內存,進入系統後可以調用ioremap(0xF800000,0x800000)來申請這段內存
********************************************************************************
**************************** printk ***********************************
#if DEBUG
#define DDD(fmt, arg...) do{printk("[%s:%d]" fmt "\n", __func__, __LINE__, ##arg);}while(0)
#else
#define DDD(fmt, arg...)
#endif
***********************************************************************
冷格就是在升級系統前對硬盤進行的格式化,可以將一個分區格式化爲不同的文件系統
mkfs.ext3 是最常用的命令之後. 跟他同一效果的命令是 mkfs -t ext3 都將會把指定分區格式化爲ext3格式。
例如:
比如我們用fdisk /dev/sda 給磁盤先分了一個分區 /dev/sda5 分區完記得執行partprobe將分區信息寫入內核.
此時必須把分區格式化之後,纔可以掛載到文件系統.
mkfs.ext3 /dev/sda5 格式化完畢之後,就可以正常掛載了 mount /dev/sda5 /data
mkdosfs
mkdosfs -n Tester /dev/fd0 將 A 槽裏的磁碟片格式化爲 DOS 格式,並將標籤設爲 Tester
******************************************************************************************************
要將目錄/modules下面所有文件中的zhangsan都修改成lisi,這樣做:
sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules`
解釋一下:
-i 表示inplace edit,就地修改文件
-r 表示搜索子目錄
-l 表示輸出匹配的文件名
只修改一個文件,後面的grep就不需要了...
******************************************************************************************************
du -sh disk 查看disk文件夾的大小
#if 01
#define DDD(fmt, arg...)
#else
#define DDD(fmt, arg...) do{printk("[%s:%d]" fmt "\n", __func__, __LINE__, ##arg);}while(0)
#endif
******************************************************************************************************
device_create()
功能:該函數創建一個設備並將其註冊到sysfs中,同時在系統的sys/class和sys/device目錄下會生成相應的類和設備入口。並且,該函數還會出發用戶空間udev的動作,udev會根據sysfs下的class在/dev目錄下創建設備節點,這也爲自動創建設備節點提供了一種途徑。通過device_create()函數,我們就可以不用通過mknod命令手動的創建設備節點了******************************************************************************************************