
米爾MYS-8MMX開發(fā)板試用體驗(yàn)測(cè)評(píng)
近期,米爾科技重磅發(fā)布新品“MYS-8MMX”開發(fā)板,并在電子發(fā)燒友、電路城等各大論壇發(fā)布試用通知,受到了眾多工程師、廣大電子愛好者圍觀,米爾選取了電子發(fā)燒友平臺(tái)一篇優(yōu)秀試用報(bào)告,在此同步給各位小伙伴們。由于篇幅原因:該文章中使用libjpeg庫和giflib庫顯示JPG圖片和GIF圖片 該測(cè)評(píng)不一一展示了,想了解具體內(nèi)容可以復(fù)制該鏈接查看:https://bbs.elecfans.com/jishu_2154638_1_1.htmlPART.1
開箱上電&系統(tǒng)燒錄&文件系統(tǒng)移植&WIFI模塊驅(qū)動(dòng)加載
米爾MYS-8MMX開發(fā)板支持兩種系統(tǒng)啟動(dòng)方式,兩種燒錄方式,兩種系統(tǒng)啟動(dòng)方式為SD卡啟動(dòng)或板上EMMC啟動(dòng),兩種燒錄方式為卡刷和線刷,其中卡刷又分為SD卡啟動(dòng)和SD卡燒寫EMMC,SD卡啟動(dòng)是開發(fā)者常用系統(tǒng)啟動(dòng)模式,因?yàn)榭梢噪S時(shí)在遠(yuǎn)端主機(jī)上對(duì)SD卡文件進(jìn)行增刪查改;而產(chǎn)品項(xiàng)目中則常用SD卡燒寫EMMC的方式,因?yàn)椴僮骱?jiǎn)單,反饋清晰(只需要一盞LED燈即可監(jiān)控燒錄是否完成)。實(shí)際上,SD卡啟動(dòng)還有一種用途就是可以在SD卡的系統(tǒng)中對(duì)EMMC內(nèi)容進(jìn)行修改,因此是最適合開發(fā)者的模式。若無特別說明,本次帖子及今后帖子我都在SD卡的系統(tǒng)中進(jìn)行開發(fā)。要制作SD啟動(dòng)卡,需要按照使用手冊(cè)獲取SD卡啟動(dòng)鏡像,名為myir-image-full-mys-8mmx.wic,與手冊(cè)所寫myir-image-full-mys-8mmx.sdcard不符:






PART.2
QT開發(fā)板本地開發(fā)framebuffer&x11vnc的妙用
安裝QT開發(fā)環(huán)境,即QT creator和QT5軟件庫:1.apt install qt5-default qtcreator安裝x11界面遠(yuǎn)程登錄軟件x11vnc1.apt install x11vnc在進(jìn)行QT開發(fā)之前,我先用vnc工具實(shí)時(shí)映射板子HDMI輸出的界面,即/dev/fb0:1.x11vnc -rawfb /dev/fb0 -clip 1920x1080






PART.3
編譯內(nèi)核鏡像&與USBHID設(shè)備通信
如果想用一種簡(jiǎn)單的方式控制更多外設(shè)的話,除了添加擴(kuò)展芯片,還有一種項(xiàng)目上用得比較多的方式是USBHID通信,將開發(fā)板作為主機(jī),通過USB接口與支持USBHID協(xié)議的從機(jī)進(jìn)行通信,這個(gè)方法非常簡(jiǎn)單,剛?cè)腴T嵌入式的小白也必須熟練掌握,只需要應(yīng)用層開發(fā)的知識(shí)和皮毛的驅(qū)動(dòng)層開發(fā)知識(shí)。要想使用這種方式進(jìn)行通信,板子的內(nèi)核鏡像就必須支持USBHID設(shè)備的檢測(cè)與讀寫,檢測(cè)是沒什么問題的,但是能不能映射到設(shè)備文件,供開發(fā)者進(jìn)行讀寫操作,那就需要檢查內(nèi)核編譯選項(xiàng)了,這里剛好是比較壞的一種情況,米爾廠家出廠鏡像是沒有打開USBHID通信的,必須讓開發(fā)者重新編譯內(nèi)核鏡像,那么這里就涉及到內(nèi)核編譯的知識(shí)了:下載并解壓內(nèi)核源碼鏡像:1.https://github.com/MYiR-Dev/myir-imx-uboot.git









PART.4
使用libjpeg庫和giflib庫顯示JPG圖片和GIF圖片
Linux系統(tǒng)編程中對(duì)JPG和GIF圖片的顯示都有集成的軟件庫可以用,顯示JPG圖片可用libjpeg庫,可以直接用apt在線安裝apt install libjpeg62-turbo libjpeg62-turbo-dev對(duì)于ARM64架構(gòu)的系統(tǒng),會(huì)有turbo關(guān)鍵字,而在x86架構(gòu)系統(tǒng)上面,直接安裝libjpeg62即可。安裝完畢之后,開發(fā)板的板上代碼可以使用jpeglib.h提供的函數(shù)接口進(jìn)行jpg文件的軟件解碼,直接讀取jpg文件并顯示在framebuffer外設(shè)之上,具體函數(shù)如下:-struct jpeg_decompress_struct cinfo;用于存放JPG文件解碼數(shù)據(jù)的結(jié)構(gòu)體-JSAMPARRAY buffer;存放一行圖像數(shù)據(jù)的結(jié)構(gòu)體-jpeg_create_decompress(&cinfo);初始化jpeg_decompress結(jié)構(gòu)體對(duì)象的函數(shù)-jpeg_stdio_src(&cinfo,input_file);-指定解壓縮數(shù)據(jù)源1.void LCD_RGB888_Show_JPG_File(char *dev , int xpos , int ypos , char *filename)2.{3. //int fjpg;4. int i,j;5. FILE *input_file = fopen(filename,"rb");6. struct jpeg_decompress_struct cinfo;7. //JPEG圖像在解碼過程中8. //使用jpeg_decompress_struct類型的結(jié)構(gòu)體來表示9. //圖像的所有信息都存儲(chǔ)在結(jié)構(gòu)體中10.11. struct jpeg_error_mgr jerr;12. //定義一個(gè)標(biāo)準(zhǔn)的錯(cuò)誤結(jié)構(gòu)體13.14. JSAMPARRAY buffer;15. //用于存取一行數(shù)據(jù)16. //fjpg = open((char *)"/home/fa/1.jpg",O_RDONLY);17. cinfo.err = jpeg_std_error(&jerr);18. //綁定錯(cuò)誤處理結(jié)構(gòu)對(duì)象19.20. jpeg_create_decompress(&cinfo);21. //初始化cinfo結(jié)構(gòu)22.23. jpeg_stdio_src(&cinfo,input_file);24. //指定解壓縮數(shù)據(jù)源25.26. jpeg_read_header(&cinfo,TRUE);27. //獲取文件信息28.29. jpeg_start_decompress(&cinfo);30. //開始解壓縮31.32. int width = cinfo.output_width;33. //圖像寬度34. int height = cinfo.output_height;35. //圖像高度36. int depth = cinfo.output_components;37. //圖像深度38. uint8_t img_byte = cinfo.jpeg_color_space;39. //像素字節(jié)數(shù)(1/2/3/4個(gè)字節(jié),對(duì)應(yīng)8/16/24/32位格式)40.41. memset(bmp_buf , 0 , sizeof(unsigned char) * width * height * depth);42.43. buffer = (*cinfo.mem->alloc_sarray)((j_common_ptr)&cinfo,JPOOL_IMAGE , width * depth , 1);44. //分配一行數(shù)據(jù)空間45. point = bmp_buf;46. while(cinfo.output_scanline < height)//逐行讀取位圖數(shù)據(jù)47. {48. jpeg_read_scanlines(&cinfo , buffer , 1);49. //讀取一行jpg圖像數(shù)據(jù)到buffer50. memcpy(point , *buffer , width * depth);51. //將buffer中的數(shù)據(jù)逐行給src_buff52. point += width * img_byte;53. //指針偏移一行54. }55.56. jpeg_finish_decompress(&cinfo);//解壓縮完畢57.58.59. for(i = 0 ; i < LCD_HEIGHT ; i ++)60. {61. for(j = 0 ; j < LCD_WIDTH ; j ++)62. if(i <= height && j <= width)63. {64. uint32_t temp = bmp_buf[(i * width+j) * 3] << 16 |65. bmp_buf[(i * width+j) * 3 + 1] << 8 |66. bmp_buf[(i * width+j) * 3 + 2];67. framebuffer_lcd[(i+ypos)*(LCD_WIDTH)+j+xpos] = temp;68.69. }70. //else framebuffer_lcd[(i+ypos)*(LCD_WIDTH)+j+xpos]=0;71. }72. int fd_lcd = open(dev , O_RDWR);73. write(fd_lcd , framebuffer_lcd , LCD_WIDTH * LCD_HEIGHT * 2);74. close(fd_lcd);}
原文標(biāo)題:米爾MYS-8MMX開發(fā)板試用體驗(yàn)測(cè)評(píng)——donatello1996
文章出處:【微信公眾號(hào):米爾MYiR】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
測(cè)評(píng)
+關(guān)注
關(guān)注
0文章
42瀏覽量
3231
發(fā)布評(píng)論請(qǐng)先 登錄
【米爾-RK3562開發(fā)板試用評(píng)測(cè)】rtc測(cè)評(píng)
如何在米爾-STM32MP257開發(fā)板上實(shí)現(xiàn)環(huán)境監(jiān)測(cè)系統(tǒng)

【米爾-STM32MP257開發(fā)板試用】——開箱評(píng)測(cè)
免費(fèi)丨米爾 STM32MP257開發(fā)板有獎(jiǎng)試用

有獎(jiǎng)丨米爾 瑞芯微YR3562開發(fā)板免費(fèi)試用

有獎(jiǎng)丨米爾 全志T536開發(fā)板免費(fèi)試用

人臉疲勞檢測(cè)應(yīng)用-米爾基于RK3576核心板/開發(fā)板

如何用OpenCV進(jìn)行手勢(shì)識(shí)別--基于米爾全志T527開發(fā)板

FacenetPytorch人臉識(shí)別方案--基于米爾全志T527開發(fā)板

追加名額丨米爾瑞芯微RK3576開發(fā)板有獎(jiǎng)試用

【米爾-Xilinx XC7A100T FPGA開發(fā)板試用】+01.開箱(zmj)
有獎(jiǎng)丨米爾 瑞芯微RK3576開發(fā)板免費(fèi)試用

點(diǎn)擊參與米爾NXP i.MX 93開發(fā)板有獎(jiǎng)試用

評(píng)論