一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Linux驅(qū)動開發(fā)_數(shù)碼相冊項目、360WIFI驅(qū)動移植介紹

DS小龍哥-嵌入式技術(shù) ? 2022-09-17 15:51 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

【摘要】 這篇文章介紹兩個知識點: 數(shù)碼相冊要求介紹、貼出案例代碼、介紹360隨身WIFI的驅(qū)動移植注意事項。

任務(wù)1: 文件系統(tǒng)本地掛載

pYYBAGMlOgKADXGfAAC5mMALges812.png

任務(wù)2:數(shù)碼相冊項目代碼

??數(shù)碼相冊功能:

1.?支持兩種格式圖片顯示: bmp、jpg

區(qū)分兩種圖片格式,通過后綴名稱區(qū)分。

2.?支持觸摸屏、按鍵方式翻頁(支持前后翻頁)

建立雙向鏈表,調(diào)用讀取目錄的函數(shù)(opendir),將目錄下所有符合要求的圖片加入到鏈表里。

3.?支持三軸加速度計,實現(xiàn)姿態(tài)感應(yīng)。根據(jù)三軸加速度的姿態(tài),調(diào)整圖片的顯示方向。

4.?支持圖片的自適應(yīng): 居中顯示,超大尺寸的圖片需要自動縮小到屏幕能夠顯示的大小。

5.?居中顯示。

6.?數(shù)碼相冊需要有狀態(tài)欄: 當前系統(tǒng)的時間信息,當前圖片的名稱、數(shù)量。

poYBAGMlOgOAKc0gAAB7ziGdZSE786.pngpYYBAGMlOgOAMX8tAABLRaVfRY4331.png

倒車影像、USB攝像頭網(wǎng)頁視頻控制、廣告機。

案例代碼:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#include "touch_input.h"
#include "key_input.h"
#include "mma7660_input.h"
#include "framebuffer.h"
#include "image_zoom.h"
#include "list.h"
#include "Imagedecoding.h"

struct PHOTOA_LBUM_INFO photo_album_info; /*重要結(jié)構(gòu)*/

/*
函數(shù)功能: 處理捕獲到的信號
*/
void exit_sighandler(int sig)
{
	printf("捕獲到信號_%d\n",sig);
	exit(0); /*結(jié)束進程*/
}

/*
函數(shù)功能: 圖片類型過濾
函數(shù)返回值: 0表示支持,其他值表示不支持
*/
int ImageTypeFiltering(char *name)
{
	/*1. 查找后綴*/
	char *jpg_p=strstr(name,".jpg");
	char *jpeg_p=strstr(name,".jpeg");
	char *bmp_p=strstr(name,".bmp");
	char *JPG_p=strstr(name,".JPG");
	char *JPEG_p=strstr(name,".JPEG");
	char *BMP_p=strstr(name,".BMP");

	/*2. 過濾后綴*/
	if(jpg_p==NULL&&jpeg_p==NULL&&bmp_p==NULL&&
	   JPG_p==NULL&&JPEG_p==NULL&&BMP_p==NULL)
	{
		return -1;
	}
	/*
		123.mp4.mp3    123.c.txt   p=strstr("123.c.txt",".c");   p執(zhí)行    *p=.
	*/
	/*3. 名稱比較,二次過濾*/
	int jpg_p_cmp=1;
	int jpeg_p_cmp=1;
	int bmp_p_cmp=1;
	int JPG_p_cmp=1;
	int JPEG_p_cmp=1;
	int BMP_p_cmp=1;
	
	if(jpg_p)jpg_p_cmp=strcmp(jpg_p,".jpg");
	if(jpeg_p)jpeg_p_cmp=strcmp(jpeg_p,".jpeg");
	if(bmp_p)bmp_p_cmp=strcmp(bmp_p,".bmp");
	if(JPG_p)JPG_p_cmp=strcmp(JPG_p,".JPG");
	if(JPEG_p)JPEG_p_cmp=strcmp(JPEG_p,".JPEG");
	if(BMP_p)BMP_p_cmp=strcmp(BMP_p,".BMP");

	if(jpg_p_cmp!=0&&jpeg_p_cmp!=0&&bmp_p_cmp!=0&&
	   JPG_p_cmp!=0&&JPEG_p_cmp!=0&&BMP_p_cmp!=0)
	{
		return -2;
	}
	return 0;
}
/*
函數(shù)功能: 遍歷指定的目錄,將圖片的絕對路徑加入到鏈表
函數(shù)參數(shù): 傳入目錄名稱
函數(shù)返回值: 負數(shù)表示失敗, 大于0表示加入到鏈表里節(jié)點的數(shù)量
*/
int Traverse_Directory(char *dir_name)
{
	int cnt=0;
	/*1. 先清空鏈表*/
	Remove_ALL_Node();
	
	/*2. 打開目錄*/
	DIR *dir=opendir(dir_name);
	if(dir==NULL)
	{
		DBUG_PRINTF("%s 目錄打開失敗!\n",dir_name);
		return -1;
	}
	
	/*3. 循環(huán)遍歷目錄*/
	struct dirent *dir_info=NULL;
	struct IMAGE_ListStruct *temp=NULL;
	int len;
	while(dir_info=readdir(dir))
	{
		 /*過濾圖片*/
		 if(ImageTypeFiltering(dir_info->d_name)!=0)
		 {
		 	DBUG_PRINTF("不符合要求的文件: %s\n",dir_info->d_name);
		 	continue;
		 }
		 cnt++;
		 //給新節(jié)點申請空間
		 temp=malloc(sizeof(struct IMAGE_ListStruct));
		
		 //計算文件名稱長度(絕對路徑): 
		 len=strlen(dir_name)+strlen(dir_info->d_name)+1;
		 
		 //給存放文件名稱指針申請空間
		 temp->file_name=malloc(len);
		
		 strcpy(temp->file_name,dir_name);
		 strcat(temp->file_name,dir_info->d_name); 
		  	 
		/*4. 添加鏈表節(jié)點*/
		AddListNode(ListHead,temp);
	}
	return cnt;
}

/*
函數(shù)功能: 刪除鏈表里所有的節(jié)點
*/
int Remove_ALL_Node(void)
{
	struct IMAGE_ListStruct *p=ListHead; //保存頭地址
	struct IMAGE_ListStruct *tmp=NULL;

	if(p==NULL) /*頭為空就創(chuàng)建一個頭*/
	{
		p=ListHead=CreateListHead(ListHead);
	}
	
	if(p->next==NULL)return 0;/*節(jié)點為空不需要刪除*/
	else
	{
		tmp=p; 	  //保存上一個節(jié)點的地址---也就是頭的地址,因為鏈表頭不需要刪除
		p=p->next; /*移動到下一個數(shù)據(jù)節(jié)點*/
		tmp->next=NULL; /*指定頭的下一個節(jié)點為NULL*/
	}
	
	while(p!=NULL)
	{
		tmp=p; //保存上一個節(jié)點的地址
		p=p->next; /*偏移到下一個節(jié)點*/

		/*刪除節(jié)點*/
		free(tmp->file_name);
		free(tmp);
	}
	return 0;
}

/*
函數(shù)功能: 在屏幕左下角實時顯示當前時間
*/
void *time_pthread_func(void *dev)
{
	time_t sec_time;
	time_t sec_tmp;
	struct tm *system_time;
	char timebuff[20];
	while(1)
	{
		/*獲取本地秒單位時間*/
		sec_time=time(NULL);
		if(sec_tmp!=sec_time)
		{
			sec_tmp=sec_time;
			/*使用時間函數(shù)將秒單位時間轉(zhuǎn)為標準時間返回*/
			system_time=localtime(&sec_time);
			/*格式化打印時間*/
			strftime(timebuff,20,"%Y-%m-%d %H:%M:%S",system_time);
			/*清除底狀態(tài)欄*/
			framebuffer_Fill(0,photo_album_info.framebuffer_var.yres-GBK_FONT_SIZE,19*GBK_FONT_SIZE/2,photo_album_info.framebuffer_var.yres,0xD1EEEE);
			/*在指定位置進行顯示時間*/
			framebuffer_String(0,photo_album_info.framebuffer_var.yres-GBK_FONT_SIZE,timebuff);
		}
	}
}

/*
函數(shù)功能: GUI界面初始化代碼
*/
void GUI_Init(void)
{
	/*1. 清屏初始化*/
	framebuffer_Fill(0,0,photo_album_info.framebuffer_var.xres,photo_album_info.framebuffer_var.yres,0x33ffcc); /*清除整個屏幕*/
	framebuffer_Fill(0,0,photo_album_info.framebuffer_var.xres,GBK_FONT_SIZE,0xD1EEEE);  /*清除頂狀態(tài)欄*/
	framebuffer_Fill(0,photo_album_info.framebuffer_var.yres-GBK_FONT_SIZE,photo_album_info.framebuffer_var.xres,photo_album_info.framebuffer_var.yres,0xD1EEEE);  /*清除底狀態(tài)欄*/
	
	/*2. 項目名稱顯示(居中顯示)*/
	framebuffer_String((photo_album_info.framebuffer_var.xres-strlen(PROJECT_NAME)*(GBK_FONT_SIZE/2))/2,
						0,PROJECT_NAME);
}

int main(int argc,char **argv)
{	
	int current_cnt=1; /*保存當前圖片的位置*/
	struct IMAGE_ListStruct *List_current_p=NULL; /*用于保存節(jié)點的位置*/
	struct ImageDecodingInfo image_info={0,0,NULL}; /*保存當前圖片解碼信息*/
	int current_x=0; /*顯示圖片時,x坐標起始位置*/
	int current_y=0; /*顯示圖片時,y坐標起始位置*/
	char CurrentNumberStr[50]; /*顯示當前數(shù)量字符串*/

	photo_album_info.lcd_direction=1; /*屏幕默認方向*/
		
	if(argc!=2)
	{
		printf("傳入的參數(shù)格式: ./app <目錄名稱>\n");
		return 0;
	}
	
	/*1. 注冊將要捕獲的信號*/
	signal(SIGINT,exit_sighandler);  /*Ctrl+C發(fā)出*/
	signal(SIGSEGV,exit_sighandler); /*進程產(chǎn)生非法內(nèi)存訪問時發(fā)出*/
	
 	/*2. 初始化幀緩沖設(shè)備*/
	if(framebuffer_Device_init(&photo_album_info)!=0)exit(1);

	/*3. 字庫初始化*/
	if(Fontlib_Init()!=0)exit(1);
	
	/*4. 創(chuàng)建讀取觸摸屏坐標的線程*/
	pthread_t touch_thread_id;
	pthread_create(&touch_thread_id,NULL,touch_pthread_func,NULL);
	pthread_detach(touch_thread_id);

	/*5. 創(chuàng)建讀取按鍵值的線程*/
	pthread_t key_thread_id;
	pthread_create(&key_thread_id,NULL,key_pthread_func,NULL);
	pthread_detach(key_thread_id);
	
	/*6. 創(chuàng)建讀取三軸加速度計姿態(tài)的線程*/
	pthread_t mma7660_thread_id;
	pthread_create(&mma7660_thread_id,NULL,mma7660_pthread_func,NULL);
	pthread_detach(mma7660_thread_id);

	/*7. 創(chuàng)建顯示時間的線程*/
	pthread_t time_thread_id;
	pthread_create(&time_thread_id,NULL,time_pthread_func,NULL);
	pthread_detach(time_thread_id);
	
	/*8. 創(chuàng)建鏈表頭*/
	ListHead=CreateListHead(ListHead);
	if(ListHead==NULL)
	{
		printf("創(chuàng)建鏈表頭失敗!\n");
		exit(1);
	}
	while(1)
	{
		List_current_p=ListHead; /*保存頭地址*/
		current_cnt=1; 			  /*位置置1*/
				
		/*遍歷指定目錄,保存圖片名稱到鏈表,并返回圖片的總數(shù)量*/
		photo_album_info.image_number=Traverse_Directory(argv[1]);
		
		/*打印鏈表里的節(jié)點信息*/
		PintListInfo(ListHead);

		/*偏移到數(shù)據(jù)節(jié)點*/
		List_current_p=List_current_p->next;
		
		while(List_current_p)
		{
			/*1. 等待加速計輸入事件*/
			
			/*2. 判斷圖片類型,開始顯示圖片*/
			if(strstr(List_current_p->file_name,".jpg")||strstr(List_current_p->file_name,".jpeg")||
			   strstr(List_current_p->file_name,".JPG")||strstr(List_current_p->file_name,".JPEG"))
			{
				/*2.1 解碼JPEG圖片*/
				if(Decoding_JPEGImage(List_current_p->file_name,&image_info))
				{
					printf("%s圖片解碼失敗!\n",List_current_p->file_name);
				}
			}
			else if(strstr(List_current_p->file_name,".bmp")||strstr(List_current_p->file_name,".BMP"))
			{
				/*2.2 解碼BMP圖片,得到圖片信息*/
				if(Decoding_BmpImage(List_current_p->file_name,&image_info))
				{
					printf("%s圖片解碼失敗!\n",List_current_p->file_name);
				}
			}

			/*3. 判斷是否解碼成功*/
			if(image_info.rgb==NULL || image_info.Height==0 || image_info.Width==0)
			{
				goto FREE_MEM; /*解碼失敗,繼續(xù)下一張*/
			}

			/*4. 解碼成功,在LCD屏上顯示*/
				/*判斷LCD屏剩余尺寸是否足夠顯示圖片,不夠顯示就縮小*/
			if(image_info.Height>photo_album_info.framebuffer_var.yres-GBK_FONT_SIZE*2||
				image_info.Width>photo_album_info.framebuffer_var.xres)
			{
				int maximum_height;
				int zoom_proportion;
				int maximum_width;
				if(image_info.Height>=image_info.Width) /*如果圖片高度大于寬度,那么縮放就以高度為準*/
				{
					maximum_height=photo_album_info.framebuffer_var.yres-GBK_FONT_SIZE*2;/*屏幕最大能夠顯示的高度*/
					zoom_proportion=image_info.Height-maximum_height; /*縮放比例*/
					maximum_width=image_info.Width-zoom_proportion; /*寬度根據(jù)高度進行比例縮放*/
					DBUG_PRINTF("Height:縮放之后的實際尺寸(寬*高):%d*%d\n",maximum_width,maximum_height);

					/*再次判斷縮放之后圖片寬度在LCD屏是否足夠顯示,如果不夠,則進行縮小*/
					if(maximum_width>photo_album_info.framebuffer_var.xres)
					{
						
					}
				}
				else/*如果圖片寬度大于高度,那么縮放就以寬度為準*/
				{
					maximum_width=photo_album_info.framebuffer_var.xres; /*屏幕最大能夠顯示的寬度*/
					zoom_proportion=image_info.Width-maximum_width; 	   /*縮放比例*/
					maximum_height=image_info.Height-zoom_proportion;      /*高度根據(jù)寬度進行比例縮放*/

					/*再次判斷縮放之后圖片高度在LCD屏是否足夠顯示,如果不夠,則進行縮小*/
					if(maximum_height>photo_album_info.framebuffer_var.yres-GBK_FONT_SIZE*2)
					{
						/*高度以屏幕最大高度為準*/
						maximum_height=photo_album_info.framebuffer_var.yres-GBK_FONT_SIZE*2;
						/*高度縮小了,那么寬度也要按照比例縮小,否則會導(dǎo)致圖片變形*/
						maximum_width=maximum_height-(maximum_height-photo_album_info.framebuffer_var.yres-GBK_FONT_SIZE*2);
					}
					
					DBUG_PRINTF("Width:縮放之后的實際尺寸(寬*高):%d*%d\n",maximum_width,maximum_height);
				}
				/*申請空間存放縮放之后的數(shù)據(jù)*/
				unsigned char *rgb_zoom=malloc(maximum_width*maximum_height*3); 
				if(rgb_zoom==NULL)
				{
					perror("存放圖片縮放數(shù)據(jù)的空間申請失敗!");
					goto FREE_MEM;
				}

				/*將圖片按照指定的尺寸進行縮小*/
				if(Image_Zoom(image_info.rgb,image_info.Width,image_info.Height,rgb_zoom,maximum_width,maximum_height)!=0)
				{
					goto FREE_MEM;
				}

				/*縮放成功,保存縮放之后圖片實際參數(shù)*/
				image_info.Height=maximum_height;
				image_info.Width=maximum_width;
				free(image_info.rgb);    /*釋放源RGB空間*/
				image_info.rgb=rgb_zoom; /*指針指向縮放之后的RGB數(shù)據(jù)空間*/

				/*顯示圖片的坐標起始位置*/
				current_x=(photo_album_info.framebuffer_var.xres-maximum_width)/2;;
				current_y=(photo_album_info.framebuffer_var.yres-maximum_height)/2;
			}
			else /*尺寸足夠顯示,進行居中顯示*/
			{
				/*計算顯示圖片時,xy坐標位置--保證居中顯示*/
				current_x=(photo_album_info.framebuffer_var.xres-image_info.Width)/2;
			    current_y=(photo_album_info.framebuffer_var.yres-image_info.Height)/2;
			}

			/*清空顯示區(qū)域*/
			framebuffer_Fill(0,GBK_FONT_SIZE,photo_album_info.framebuffer_var.xres,photo_album_info.framebuffer_var.yres-GBK_FONT_SIZE,0x33ffcc);

			/*在LCD指定位置顯示圖片*/
			DBUG_PRINTF("在LCD顯示的位置:x=%d,y=%d\n",current_x,current_y);
			framebuffer_DisplayImages(current_x, /*橫坐標位置*/
										current_y, /*縱坐標位置*/
										image_info.Width,
										image_info.Height,
										image_info.rgb);
			
			DBUG_PRINTF("顯示: 第%d個節(jié)點的數(shù)據(jù)=%s\n",current_cnt,List_current_p->file_name);

			/*圖片顯示的數(shù)量情況*/
			sprintf(CurrentNumberStr,"%d/%d",photo_album_info.image_number,current_cnt);
			/*清除底狀態(tài)欄*/
			framebuffer_Fill((photo_album_info.framebuffer_var.xres-(strlen(CurrentNumberStr)*GBK_FONT_SIZE/2))/2-32,
							 photo_album_info.framebuffer_var.yres-GBK_FONT_SIZE,
							 photo_album_info.framebuffer_var.xres,
							 photo_album_info.framebuffer_var.yres,0xD1EEEE);
			/*在指定位置顯示當前數(shù)量*/
			framebuffer_String((photo_album_info.framebuffer_var.xres-(strlen(CurrentNumberStr)*GBK_FONT_SIZE/2))/2,
			                     photo_album_info.framebuffer_var.yres-GBK_FONT_SIZE,CurrentNumberStr);
			
			/*在右下角顯示當前圖片名稱*/
			framebuffer_String(photo_album_info.framebuffer_var.xres/2+(strlen(CurrentNumberStr)*GBK_FONT_SIZE/2)/2 +GBK_FONT_SIZE*2,
			                     photo_album_info.framebuffer_var.yres-GBK_FONT_SIZE,basename(List_current_p->file_name));
FREE_MEM:
			if(image_info.rgb) /*判斷空間是否申請成功*/
			{
				free(image_info.rgb); /*釋放空間*/
				image_info.rgb=NULL;
			}
			image_info.Height=0;
			image_info.Width=0;	

			/*等待按鍵信號和觸摸屏信號進行翻頁 或者有切換屏幕的操作時進行切換屏幕方向*/
			while(!photo_album_info.page_direction&&!photo_album_info.lcd_state){}
			
			if(photo_album_info.page_direction==1) /*右翻頁*/
			{
				List_current_p=List_current_p->next;
				current_cnt++; /*記錄圖片位置*/
			}
			else if(photo_album_info.page_direction==2)/*左翻頁*/
			{
				if(current_cnt>1)
				{
					List_current_p=List_current_p->old;
					current_cnt--; /*記錄圖片位置*/	
				}
			}
			photo_album_info.page_direction=0; /*狀態(tài)清0*/
			photo_album_info.lcd_state=0; /*狀態(tài)清0*/
		}
	}
	return 0;
}

任務(wù)3: 360 WIFI驅(qū)動測試、無線工具使用

\12 20181210 文件系統(tǒng)本地掛載、360WIFI驅(qū)動與相關(guān)無線工具安裝\參考資料\01 360USB無線網(wǎng)卡驅(qū)動及相關(guān)無線工具安裝\03 WIFI驅(qū)動及相關(guān)工具庫一鍵移植文件\360wifi_20170926.tar

poYBAGMlOgOAX9TMAACZKEVl49k218.pngpYYBAGMlOgSAcahXAAIJxCJoo30491.png

??Udhcpc自動分配IP地址的命令,需要的腳本和使用方法

poYBAGMlOgSARJSSAADmbsII4fM145.pngpYYBAGMlOgSAKNS-AACigoJi8Ws239.png

??兩個腳本里的代碼。

poYBAGMlOgiAd4HMAADWGwWGgOI614.pngpYYBAGMlOgiAISstAADxqb9IAGI925.png

??WIFI的配置文件

poYBAGMlOgiAMHgOAAF0zgAnJzw732.png

??一鍵移植文件布局。

pYYBAGMlOgiAOb0-AADBrlORsmo775.png

[root@wbyq 360wifi]# ls

360wifi_1.sh 360wifi_2.sh bin etc lib mt7601Usta.ko simple.script

[root@wbyq 360wifi]# tree

.

├── 360wifi_1.sh

├── 360wifi_2.sh

├── bin

│ ├── ifrename

│ ├── iwconfig

│ ├── iwevent

│ ├── iwgetid

│ ├── iwlist

│ ├── iwpriv

│ ├── iwspy

│ ├── wpa_cli

│ ├── wpa_supplicant

│ └── wpa_supplicant.conf

├── etc

│ ├── Wireless

│ │ └── RT2870STA

│ │ ├── RT2870STA.dat

│ │ └── RT2870STA.dat~

│ └── wpa_supplicant.conf

├── lib

│ └── libiw.so.29

├── mt7601Usta.ko

└── simple.script

5 directories, 18 files

[root@wbyq 360wifi]#

??USB設(shè)備匹配的流程

當前USB設(shè)備插到電腦的USB口上之后,USB產(chǎn)生USB中斷,USB主機就會發(fā)生特定命令,詢問插入

進來的設(shè)備,是什么設(shè)備。設(shè)備會按照USB協(xié)議的規(guī)定,回應(yīng)一個數(shù)據(jù)包---結(jié)構(gòu)體。

主機收到數(shù)據(jù)包之后會進行解析,會按照設(shè)備的類型或者設(shè)備ID進行在內(nèi)核里尋找與之匹配的驅(qū)動,

尋找成功就會調(diào)用USB驅(qū)動程序。

??啟動腳本連接WIFI

[root@tiny4412 etc]#vi wpa_supplicant.conf //修改將要連接的路由器名稱和密碼

[root@tiny4412 etc]#cd /work/360wifi/

[root@tiny4412 360wifi]#ls

360wifi_1.sh bin lib simple.script

360wifi_2.sh etc mt7601Usta.ko

[root@tiny4412 360wifi]#./360wifi_2.sh //運行腳本2,安裝WIFI驅(qū)動,啟動WIFI連接熱點,連接上之后再分配IP地址

[ 917.120000] rtusb init rt2870 --->

[ 917.120000] <-- RTMPAllocTxRxRingMemory, Status=0

[ 917.120000] <-- RTMPAllocAdapterBlock, Status=0

[ 917.120000] BULK IN MaxPacketSize = 512

[ 917.120000] EP address = 0x84

[ 917.120000] BULK IN MaxPacketSize = 512

[ 917.120000] EP address = 0x85

[ 917.120000] BULK OUT MaxPacketSize = 512

[ 917.125000] EP address = 0x 8

[ 917.130000] BULK OUT MaxPacketSize = 512

[ 917.130000] EP address = 0x 4

[ 917.135000] BULK OUT MaxPacketSize = 512

[ 917.140000] EP address = 0x 5

[ 917.145000] BULK OUT MaxPacketSize = 512

[ 917.145000] EP address = 0x 6

[ 917.150000] BULK OUT MaxPacketSize = 512

[ 917.155000] EP address = 0x 7

[ 917.155000] BULK OUT MaxPacketSize = 512

[ 917.160000] EP address = 0x 9

[ 917.170000] usbcore: registered new interface driver rt2870

[ 917.350000] Current MAC: =b0:d5:9d:0c:51:29

[ 917.355000] NICReadEEPROMParameters: RxPath = 1, TxPath = 1

[ 917.360000] 20MHz BW, 2.4G band-03030505, Adata = 03030505, Gdata = 03030505

[ 917.365000] 20MHz BW, 2.4G band-00000004, Adata = 00000004, Gdata = 00000004

[ 917.365000] 20MHz BW, 2.4G band-00000002, Adata = 00000002, Gdata = 00000002

[ 917.365000] 20MHz BW, 2.4G band-00000002, Adata = 00000002, Gdata = 00000002

[ 917.370000] 20MHz BW, 2.4G band-ffff0002, Adata = ffff0002, Gdata = ffff0002

[ 917.610000] BuildChannel # 1 :: Pwr0 = 6, Pwr1 =0, Flags = 0

BuildChannel # 2 :: Pwr0 = 6, Pwr1 =0, Flags = 0

BuildChannel # 3 :: Pwr0 = 6, Pwr1 =0, Flags = 0

BuildChannel # 4 :: Pwr0 = 6, Pwr1 =0, Flags = 0

BuildChannel # 5 :: Pwr0 = 6, Pwr1 =0, Flags = 0

BuildChannel # 6 :: Pwr0 = 6, Pwr1 =0, Flags = 0

BuildChannel # 7 :: Pwr0 = 6, Pwr1 =0, Flags = 0

BuildChannel # 8 :: Pwr0 = 6, Pwr1 =0, Flags = 0

BuildChannel # 9 :: Pwr0 = 6, Pwr1 =0, Flags = 0

BuildChannel # 10 :: Pwr0 = 6, Pwr1 =0, Flags = 0

BuildChannel # 11 :: Pwr0 = 6, Pwr1 =0, Flags = 0

BuildChannel # 12 :: Pwr0 = 6, Pwr1 =0, Flags = 0

BuildChannel # 13 :: Pwr0 = 6, Pwr1 =0, Flags = 0

BuildChannel # 14 :: Pwr0 = 6, Pwr1 =0, Flags = 0

<==== rt28xx_init, Status=0

[ 917.665000] 0x1300 = 00064300

udhcpc (v1.23.2) started

Setting IP address 0.0.0.0 on ra0

Sending discover...

[ 920.025000] RSN_IE: f0b15003, len = 22

[ 920.025000] 0x0000 : 30 14 01 00 00 0f ac 04 01 00 00 0f ac 04 01 00

[ 920.025000] 0x0010 : 00 0f ac 02 0c 00

[ 920.035000] /work/360_WIFI/DPO_MT7601U_LinuxSTA_3.0.0.4_20130913/os/linux/../../sta/rtmp_data.c:540 assert pRxWI->RxWIWirelessCliID == BSSID_WCIDfailed

[ 920.090000] Key = 28:fd:b8:58:c5:ce:85:e5:33:97:d8:09:8d:46:c2:6a

[ 920.090000] Rx MIC Key = 00:00:00:00:00:00:00:00

[ 920.090000] Tx MIC Key = 00:00:00:00:00:00:00:00 (表示W(wǎng)IFI已經(jīng)成功連接熱點)

Sending discover...

[ 923.340000] CmdThread : CMDTHREAD_SET_ASIC_WCID : WCID = 1, SetTid = 10000, DeleteTid = ffffffff.

[ 923.340000] 1-MACValue= e02d6594,

[ 923.340000] 2-MACValue= 1701d,

Sending select for 192.168.43.240...

Lease of 192.168.43.240 obtained, lease time 3600

Setting IP address 192.168.43.240 on ra0

Deleting routers

route: SIOCDELRT: No such process

Adding router 192.168.43.1

Recreating /etc/resolv.conf

Adding DNS server 192.168.43.1 //表示W(wǎng)IFI已經(jīng)成功分配了IP地址

??查看網(wǎng)卡IP地址,ping百度測試是否可以訪問外網(wǎng)

poYBAGMlOgmAVlI2AAEy73TU20A009.png

??查看當前WIFI連接的網(wǎng)卡信息

pYYBAGMlOgmAMmzKAADlfDG6SdM030.png

??通過WIFI管理工具,掃描周邊的熱點

[root@tiny4412 360wifi]#iwlist scanning


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 驅(qū)動
    +關(guān)注

    關(guān)注

    12

    文章

    1916

    瀏覽量

    86891
  • 數(shù)碼
    +關(guān)注

    關(guān)注

    0

    文章

    299

    瀏覽量

    37482
  • WIFI
    +關(guān)注

    關(guān)注

    81

    文章

    5399

    瀏覽量

    208267
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    恩智浦為無線連接SoC開發(fā)的統(tǒng)一WiFi驅(qū)動程序多芯片多接口驅(qū)動(MXM)

    本文將重點介紹恩智浦為無線連接SoC開發(fā)的統(tǒng)一Wi-Fi驅(qū)動程序——多芯片多接口驅(qū)動 (MXM),詳細說明其架構(gòu)設(shè)計如何簡化基于恩智浦無線連接SoC和i.MX應(yīng)用處理器的
    發(fā)表于 02-28 09:13 ?724次閱讀
    恩智浦為無線連接SoC<b class='flag-5'>開發(fā)</b>的統(tǒng)一<b class='flag-5'>WiFi</b><b class='flag-5'>驅(qū)動</b>程序多芯片多接口<b class='flag-5'>驅(qū)動</b>(MXM)

    迅為RK3568開發(fā)驅(qū)動指南Linux中通用SPI設(shè)備驅(qū)動

    迅為RK3568開發(fā)驅(qū)動指南Linux中通用SPI設(shè)備驅(qū)動
    的頭像 發(fā)表于 01-23 11:02 ?2804次閱讀
    迅為RK3568<b class='flag-5'>開發(fā)</b>板<b class='flag-5'>驅(qū)動</b>指南<b class='flag-5'>Linux</b>中通用SPI設(shè)備<b class='flag-5'>驅(qū)動</b>

    linux下TLV320ADC3101音頻這塊驅(qū)動怎么配置、移植?

    如下圖示,現(xiàn)在是要配置TLV320ADC3101 兩路音頻差分輸入;問下linux下TLV320ADC3101音頻這塊驅(qū)動怎么配置、移植。 需移植到i.MX 8M Mini平臺
    發(fā)表于 09-30 06:34

    北京迅為RK3568開發(fā)板嵌入式學(xué)習(xí)之Linux驅(qū)動全新更新-CAN+

    北京迅為RK3568開發(fā)板嵌入式學(xué)習(xí)之Linux驅(qū)動全新更新-CAN+
    的頭像 發(fā)表于 09-04 15:29 ?1038次閱讀
    北京迅為RK3568<b class='flag-5'>開發(fā)</b>板嵌入式學(xué)習(xí)之<b class='flag-5'>Linux</b><b class='flag-5'>驅(qū)動</b>全新更新-CAN+

    嵌入式linux開發(fā)的基本步驟有哪些?

    嵌入式Linux開發(fā)是一個復(fù)雜的過程,涉及到硬件選擇、操作系統(tǒng)移植、驅(qū)動開發(fā)、應(yīng)用程序開發(fā)等多個
    的頭像 發(fā)表于 09-02 09:11 ?1231次閱讀

    linux系統(tǒng)的設(shè)備驅(qū)動一般分幾類

    視頻設(shè)備驅(qū)動 USB設(shè)備驅(qū)動 其他設(shè)備驅(qū)動 下面將對這些設(shè)備驅(qū)動進行詳細的介紹。 字符設(shè)備驅(qū)動
    的頭像 發(fā)表于 08-30 15:13 ?1006次閱讀

    Linux設(shè)備驅(qū)動程序分類有哪些

    Linux設(shè)備驅(qū)動程序是操作系統(tǒng)與硬件設(shè)備之間的橋梁,負責(zé)實現(xiàn)硬件設(shè)備與操作系統(tǒng)之間的通信和控制。Linux設(shè)備驅(qū)動程序的分類繁多,可以根據(jù)不同的標準進行分類。 按硬件類型分類
    的頭像 發(fā)表于 08-30 15:11 ?1230次閱讀

    linux驅(qū)動程序如何加載進內(nèi)核

    Linux系統(tǒng)中,驅(qū)動程序是內(nèi)核與硬件設(shè)備之間的橋梁。它們允許內(nèi)核與硬件設(shè)備進行通信,從而實現(xiàn)對硬件設(shè)備的控制和管理。 驅(qū)動程序的編寫 驅(qū)動程序的編寫是
    的頭像 發(fā)表于 08-30 15:02 ?1096次閱讀

    linux驅(qū)動程序的編譯方法是什么

    Linux驅(qū)動程序的編譯方法主要包括兩種: 與內(nèi)核一起編譯 和 編譯成獨立的內(nèi)核模塊 。以下是對這兩種方法的介紹: 一、與內(nèi)核一起編譯 與內(nèi)核一起編譯意味著將驅(qū)動程序的源代碼直接集成到
    的頭像 發(fā)表于 08-30 14:46 ?1242次閱讀

    Linux 驅(qū)動開發(fā)與應(yīng)用開發(fā),你知道多少?

    一、Linux驅(qū)動開發(fā)與應(yīng)用開發(fā)的區(qū)別開發(fā)層次不同:Linux
    的頭像 發(fā)表于 08-30 12:16 ?1588次閱讀
    <b class='flag-5'>Linux</b> <b class='flag-5'>驅(qū)動</b><b class='flag-5'>開發(fā)</b>與應(yīng)用<b class='flag-5'>開發(fā)</b>,你知道多少?

    驅(qū)動數(shù)碼管顯示不良原因

    驅(qū)動數(shù)碼管顯示不良的原因可能有很多,涉及到硬件、軟件、環(huán)境等多個方面。 一、引言 驅(qū)動數(shù)碼管是一種廣泛應(yīng)用于工業(yè)自動化、電子設(shè)備等領(lǐng)域的顯示設(shè)備。它具有顯示清晰、亮度高、壽命長等優(yōu)
    的頭像 發(fā)表于 08-28 16:38 ?1753次閱讀

    數(shù)碼驅(qū)動芯片引腳功能

    數(shù)碼驅(qū)動芯片是一種用于驅(qū)動數(shù)碼管顯示數(shù)字或字符的集成電路。數(shù)碼驅(qū)動芯片的引腳功能是實現(xiàn)
    的頭像 發(fā)表于 08-28 16:08 ?2062次閱讀

    數(shù)碼驅(qū)動芯片原理是什么

    數(shù)碼驅(qū)動芯片是一種廣泛應(yīng)用于數(shù)字顯示領(lǐng)域的電子元件,它能夠?qū)?shù)字信號轉(zhuǎn)換為可視的數(shù)字顯示。 一、數(shù)碼驅(qū)動芯片概述 1.1 數(shù)碼
    的頭像 發(fā)表于 08-28 16:07 ?1957次閱讀

    數(shù)碼驅(qū)動芯片有哪幾種

    。以下是對數(shù)碼驅(qū)動芯片的介紹: 74HC595 74HC595是一種8位串行輸入、并行輸出的移位寄存器,常用于驅(qū)動共陽極數(shù)碼管。它具有以下
    的頭像 發(fā)表于 08-28 15:59 ?3064次閱讀

    數(shù)碼驅(qū)動芯片好壞判斷方法

    數(shù)碼驅(qū)動芯片是數(shù)字顯示設(shè)備中的核心部件,其性能好壞直接影響到數(shù)碼管的顯示效果和使用壽命。 一、數(shù)碼驅(qū)動芯片的工作原理
    的頭像 發(fā)表于 08-28 15:57 ?2013次閱讀