這裡簡單紀錄這一 "將uClinux porting 到 STM32F4 Discovery" 的成果。
參考這些網址: http://www.emcu.it/uCLinux/uCLinux.html 、 https://emcraft.com/products/343, 將 uBoot 、 uClinux、及 ROM file system Image正確燒錄至 STM32F4 Discovery。
硬體連接 透過 USB轉232 連接到STM32F4 Discovery的 PC10/TX, PC11/RX,在HOST端 PC 執行 putty serial console。如下圖:
接著 寫一支 Linux AP C1.c(Hello World), 透過 Cross Compiler 編譯成 C1.exe, 之後正確的傳至 在STM32F4 Discovery執行的 uClinux, C1.exe 放在 /var/tmp 目錄。
再接著 寫 uClinux 的驅動範例與搭配的AP程式、驅動程式 Drv1.c 將其編譯成 Drv.ko、AP程式 AP1.c 編譯成 AP1.exe, 之後正確的傳至 在STM32F4 Discovery執行的 uClinux,也是放在 /var/tmp 目錄。
1. 先執行 ./C1.exe 會看到 Hello CYH,
C1.c 程式如下:
#include <stdio.h>
int main()
{
printf( "Hello CYH\r\n" );
return 0;
}
2. 再來測試於 STM32F4 Discovery 上的 uClinux 執行 Linux Device Driver驅動程式: 先 insmod Drv1.ko, 會看到:
Hello, world
name=cyh , age=9999
之後執行 ./AP1.exe, 正確執行, 畫面如下:
AP1.c 程式如下:
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
int main( int argc, char* argv[] )//stdin=0 out=1 err=2
{
size_t readLen;
int fd;
char BUF[ 64 ]; // mknod /dev/chrDrv1 c 99 0
fd = open ( "/dev/chrDrv1" , O_RDWR );
write ( fd , (void *)"CYH1234567890ABCDEFGHIJ" , 24 );
lseek ( fd , 0, SEEK_SET );
memset(BUF,0,64);
readLen = read ( fd , (void *)BUF, 3 ); // BUF <- "CYH";
printf( "1. BUF=%s\r\n", BUF );
memset(BUF,0,64);
readLen = read ( fd , (void *)BUF, 10 ); // BUF <- "1234567890";
printf( "2. BUF=%s\r\n", BUF );
memset(BUF,0,64);
readLen = read ( fd , (void *)BUF, 10 ); // BUF <- "ABCDEFGHIJ";
printf( "3. BUF=%s\r\n", BUF );
memset(BUF,0,64);
readLen = read ( fd , (void *)BUF, 10 ); // BUF <- EOF or 0;
printf( "BUF=%s\r\n", BUF );
close ( fd ) ;
return 0;
}
85國語言翻譯公司
回覆刪除提供法文口譯等服務
電話: 02-7726-0956
LINE-ID: 0989298406
PS: 點擊小房子會有優惠喔!!!
華碩翻譯社
英文翻譯|http://bianmiaohun.tctran.com/