pix源碼
❶ 常見的文件「後綴名」有哪些
1、Zip壓縮文件,要解壓此類文件,需要在電腦上要安裝一個解壓軟體,如2345好壓、WinRAR等。
2、Avi視頻文件,用動畫軟體可打開,例如Flash、Photoshop、Premiere等。
3、xls excel工作表,用Excel打開。
4、doc word文檔文件,可以用word或者wps等軟體打開。
5、wav聲音文件,用媒體播放器打開,例如愛奇藝、騰訊、優酷等。
6、PNG、JPEG、GIF圖像軟體,用圖像處理軟體打開,例如Photoshop、ACDSee Free。
(1)pix源碼擴展閱讀:
可執行文件 exe、com
語言文件 c、asm、for、lib、lst、msg、obj、pas、wki、bas
映像文件 map (其每一行都定義了一個圖像區域以及當該區域被觸發後應返回的url信息)
備份文件 bak(被自動或是通過命令創建的輔助文件,它包含某個文件的最近一個版本)
臨時文件 tmp (word、excel等軟體在操作時會產生此類文件)
模板文件 dot(通過word模板可以簡化一些常用格式文檔的創建工作)
❷ 如何使用FFMPEG+H264實現RTP傳輸數據
開發環境:
WINDOWS7 32bit
MINGW
eclipse juno cdt
1、首先你要編譯好FFMPEG,
a) 方法一:可以去官網下載源碼,用MINGW編譯(編譯時記得支持H264,當然,事先得下載並編譯好libx264,視頻技術論壇里有很多介紹)
b) 方法二:更加省心省力的方法是,下載別人已經編譯好的資源,如ZeranoeFFmpeg的冊好賀,下載他的襪前dev版本,包含了頭文件,鏈接庫等必須的東西,當然,這東西已經是支持H264的了。
2、以下的就是代碼部分了:
a) 先聲明必要的變數:
AVFormatContext *fmtctx;
AVStream *video_st;
AVCodec *video_codec;
const int FPS = 25; /* 25 images/s */
const char *RDIP = 「127.0.0.1」;
unsigned int RDPORT = 5678;
const unsigned int OUTWIDTH = 720;
const unsigned int OUTHEIGHT = 480;
av_register_all();
avformat_network_init();
b) 初始化AV容器
fmtctx = avformat_alloc_context();
c) 獲得輸出格式,這里是RTP網路流
fmtctx->oformat = av_guess_format("rtp", NULL, NULL);
d)打開網路流
snprintf(fmtctx->filename, sizeof(fmtctx->filename),"rtp://%s:%d",RDIP,RDPORT);
avio_open(&fmtctx->pb,fmtctx->filename, AVIO_FLAG_WRITE)
e) 開始添加H264視頻流
video_st = NULL;video_st = add_video_stream(fmtctx, &video_codec, AV_CODEC_ID_H264);
其中,add_video_stream函數為:
add_video_stream(AVFormatContext *oc,AVCodec **codec, enum AVCodecID codec_id)
{
AVCodecContext *c;
AVStream *st;
/* find the video encoder */
*codec = avcodec_find_encoder(codec_id);
st = avformat_new_stream(oc, *codec);
c = st->codec;
avcodec_get_context_defaults3(c, *codec);
c->codec_id = codec_id;
c->width = OUTWIDTH;
c->州派height = OUTHEIGHT;
c->time_base.den = FPS;
c->time_base.num = 1;
c->pix_fmt = PIX_FMT_YUV420P;
if(oc->oformat->flags & AVFMT_GLOBALHEADER)
c->flags|= CODEC_FLAG_GLOBAL_HEADER;
av_opt_set(c->priv_data, "preset", "ultrafast", 0);
av_opt_set(c->priv_data, "tune","stillimage,fastdecode,zerolatency",0);
av_opt_set(c->priv_data, "x264opts","crf=26:vbv-maxrate=728:vbv-bufsize=364:keyint=25",0);return st;}
// OPEN THE CODE
avcodec_open2(video_st->codec, video_codec, NULL);
/* Write the stream header, if any. */
avformat_write_header(fmtctx, NULL);
f) 現在,就可以不斷的編碼數據,並發生數據了
AVFrame* m_pYUVFrame = avcodec_alloc_frame();
while(1) //這里設置成無限循環,你可以設置成250,或其他數進行測試,觀看結果
{
fill_yuv_image(m_pYUVFrame, video_st->codec->frame_number,OUTWIDTH, OUTHEIGHT);
/* encode the image */
AVPacket pkt;
int got_output = 0;
av_init_packet(&pkt);
pkt.data = NULL; // packet data will be allocated by the encoder
pkt.size = 0;
pkt.pts = AV_NOPTS_VALUE;
pkt.dts =AV_NOPTS_VALUE;
m_pYUVFrame->pts = video_st->codec->frame_number;
ret = avcodec_encode_video2(c, &pkt,frame, &got_output);
if (ret < 0) {fprintf(stderr, "Error encoding video frame: %s\n", av_err2str(ret));
exit(1);
}
/* If size is zero, it means the image was buffered. */
if (got_output)
{
if (c->coded_frame->key_frame)pkt.flags |= AV_PKT_FLAG_KEY;
pkt.stream_index = st->index;
if (pkt.pts != AV_NOPTS_VALUE )
{
pkt.pts = av_rescale_q(pkt.pts,video_st->codec->time_base, video_st->time_base);
}
if(pkt.dts !=AV_NOPTS_VALUE )
{
pkt.dts = av_rescale_q(pkt.dts,video_st->codec->time_base, video_st->time_base);
}
/* Write the compressed frame to the media file. */
ret = av_interleaved_write_frame(oc,&pkt);
}
else {
ret = 0;
}
}
g) Fill_yuv_image函數:
/* Prepare a mmy image. */
static void fill_yuv_image(AVPicture *pict,int frame_index,int width, int height)
{
int x, y, i;
i = frame_index;
/* Y */
for (y = 0; y < height; y++)
for (x = 0; x < width; x++)
pict->data[0][y * pict->linesize[0] +x] = x + y + i * 3;
/* Cb and Cr */
for (y = 0; y < height / 2; y++)
{
for (x = 0; x < width / 2; x++)
{
pict->data[1][y * pict->linesize[1] +x] = 128 + y + i * 2;
pict->data[2][y * pict->linesize[2] +x] = 64 + x + i * 5;
}
}
}
h) 列印sdp信息,僅需一次,列印的sdp信息,用在VLC播放器結束網路視頻流時用到
//列印sdp信息
char sdp[2048];
av_sdp_create(&fmtctx,1, sdp, sizeof(sdp));
printf("%s\n",sdp);
fflush(stdout);
i)最後,做一些清理工作
avcodec_free_frame(&m_pYUVFrame);
av_write_trailer(fmtctx);
/* Free the streams. */
for (unsigned int i = 0; i< fmtctx->nb_streams;i++)
{
av_freep(&fmtctx->streams->codec);
av_freep(&fmtctx->streams);
}
if(!(fmtctx->oformat->flags& AVFMT_NOFILE))
/* Close the output file. */
avio_close(fmtctx->pb);
/*free the stream */
av_free(fmtctx);
3、編譯代碼,記得添加庫文件,運行一次代碼,不用死循環,設置不用循環,因為是要讓他列印出sdp文件的信息。得到sdp信息,比如我精簡成如下:
c=IN IP4 127.0.0.1
m=video 56782 RTP/AVP 96
a=rtpmap:96 H264/90000
a=framerate:25
a=fmtp:96 packetization-mode=1
把這些信息保存到一個文本文件,並改名為sdp後綴,如mySDP.sdp。
4、從官網下載VLC播放器,重新運行上述的代碼,這一次要循環,具體循環多久,你自己決定,這一次是正式測試了。代碼跑起來後,把剛剛的sdp文件用VLC打開,直接把sdp文件拖到VLC播放器中就行了。等待緩沖,就可以看到效果了。
5、代碼中剩掉了出錯檢查部分,請自行添加。
6、關於IP地址,這里是127.0.0.1,是供本機測試,可以改成制定的接受數據的電腦IP地址,或者廣播地址IP地址。
❸ 3D建模都用哪些軟體
3D建模軟體有下列幾種:
一、C4D軟體
是Siemens PLM Software公司出品的一個產品工程解決方案,它為用戶的產品設計及加工過程提供了數字化造型和驗證手段。
Unigraphics NX針對用戶的虛擬產品設計和工藝設計的需求,提供了經過實踐驗證的解決方案。
UG同時也是用戶指南(user guide)和普遍語法(Universal Grammar)的縮寫。
UG裡面自帶的光線追蹤渲染出來的。
五、KeyShot
意為「The Key to Amazing Shots」,是一個互動性的光線追蹤與全域光渲染程序,無需復雜的設定即可產生相片般真實的 3D 渲染影像。
專門的渲染軟體Keyshot,操作簡單功能強大,支持市面上常用的三維模型,導入既可使用。
六、3D One
3D One軟體是全國首創的青少年三維創意設計軟體,是助力中小學培養創新思維和開展創新教學的重要工具。
3D One已廣泛應用於通用技術、信息技術、綜合實踐等學科領域,與趣味編程、機器人、開源硬體、3D列印機、激光切割機等技術融合協同發展,將創想轉化為實物,激發學生自主學習的熱情,積極地發揮學生的主觀能動性和創造性,推動中小學生從軟體應用能力向創新能力素養的轉變。
七、sketch up。
SketchUp又名「草圖大師」, 是一款可供您用於創建、共享和展示 3D 模型的軟體。不同於3dsmax,它是平面建模。通過一個使用簡單、內容詳盡的顏色、線條和文本提示指導系統,讓人們不必鍵入坐標,就能幫助其跟蹤位置和完成相關建模操作。
就像人們在實際生活中使用的工具那樣,SketchUp 為數不多的工具中每一樣都可做多樣工作。
八、SolidWorks。
簡稱「SW」。
SolidWorks是達索系統(Dassault Systemes )下的子公司,專門負責研發與銷售機械設計軟體的視窗產品,公司總部位於美國馬薩諸塞州。
九、犀牛
Rhino是由美國Robert McNeel公司於1998年推出的一款基於NURBS為主的三維建模軟體。
Rhino軟體,Rhino英文全名為Rhinoceros,中文稱之為犀牛,於1998年8月正式上市,是美國Robert McNeel & Assoc開發的PC上強大的專業3D造型軟體。
❹ ubuntu 環境下怎樣編譯pixhawk px4源碼
Ubuntu環境下Pixhawk原生固件PX4的編譯
分類:無人機ubuntu代碼編譯Pixhawk
(3946) (6)
Ubuntu下Pixhawk原生固件PX4的編譯這個問題困擾了兩天時間,可能是博主腦力不夠,主要是環境搭建不起來,主要原因應該是路徑的原因,最後在大師傅的幫助下還好成功將路徑搭建好,成功編譯。
下面就跟大家分享一下環境搭建的過程。
1.操作環境
每次寫文章,環境一定要介紹的,不同的環境總會出現不同的問題
我的環境是Windows下面安裝虛擬機,虛擬機跑Ubuntu
Windows:win10 64位
虛擬機:VMware Workstation 12 Pro 12.1.0 build-3272444
Ubuntu:Ubuntu15.10
2.編譯環境搭建
(1)許可權設置
官方提示:
Warning Never ever fix permission problems by using 'sudo'. It will create more permission problems in the process and require a system reinstallation to fix them.
意思是你會遇到許可權問題,不要用sudo解決,那樣會帶來更多問題,但是我沒聽他的,我沒用,最後也是實現了
官方提供指令
[plain] view plain
然後注銷,重新登錄生效
(2)安裝
更新包列表,安裝下面編譯PX4的依賴包。PX4主要支持的系列:
NuttX based hardware: Pixhawk, Pixfalcon
Snapdragon Flight hardware: Snapdragon
Raspberry Pi hardware: Raspberry Pi 2
Host simulation: jMAVSim SITL and Gazebo SITL
注意:安裝Ninja Build System可以比make更快進行編譯。如果安裝了它就會自動選擇使用它進行編譯。
[plain] view plain
卸載模式管理器
[plain] view plain
更新包列表和安裝下面的依賴包。務必安裝指定的版本的包
[plain] view plain
上面代碼中紅色部分大家需要一高警惕,gcc-arm-none-eabi版本導致PX4/Firmware編譯錯誤,現在apt-get安裝的gcc-arm-none-eabi基本上是4.9的版本,但是這個固件需要gcc-arm-none-eabi 4.8de 版本,所以最後安裝好以後,查看你的gcc-arm-none-eabi版本,如果是4.9需要手動安裝4.8的版本,安裝gcc-arm-none-eabi 4.8的版本的方法如下:
[plain] view plain
【Warning】上面紅色的路徑一定要添加正確,不然問題很多,我第一次就輸入錯誤,結果結果開不了機了,反復輸入密碼。博主裝的是Ubuntu 64位系統,而上述arm-none-eabi是直接下載的編譯好的32位,還需要安裝一個東西
[plain] view plain
可以檢查arm-none-eabi 4.8.4是否安裝成功,輸入以下指令:
[plain] view plain
如果出現如上信息,交叉編譯環境搭建就搭建成功了
(3)代碼編譯
根據PX4中文維基官網教程。
安裝Git
[plain] view plain
下載代碼
[plain] view plain
初始化
先進入Firmware文件夾,進而進行初始化、更新子模塊操作,耐心的等待……
[plain] view plain
許可權
編譯時會遇到許可權問題,執行指令
[plain] view plain
-R 是對文件下麵包含的子文件許可權問題,* 是對所有文件的許可權問題
編譯
[plain] view plain
注意到「make」是一個字元命令編譯工具,「px4fmu-v2」是硬體版本,「default」是默認配置,所有的PX4編譯目標遵循這個規則。
最後附一張編譯成功的代碼,如果這樣你還有問題,請給我留言。
[plain] view plain
-- nuttx-px4fmu-v2-default
-- The ASM compiler identification is GNU
-- Found assembler: /opt/gcc-arm-none-eabi-4_8-2014q3/bin/arm-none-eabi-gcc
-- Found pythonInterp: /usr/bin/python (found version "2.7.10")
-- Using C++03
-- Release build type: RelWithDebInfo
-- Adding UAVCAN STM32 platform driver
-- Configuring done
-- Generating done
-- Build files have been written to: /home/lihongwei/Documents/Firmware/build_px4fmu-v2_default
#+@Tools/check_submoles.sh
PX4 CONFIG: px4fmu-v2_default
Scanning dependencies of target git_mavlink
Scanning dependencies of target git_uavcan
Scanning dependencies of target git_gencpp
Scanning dependencies of target git_genmsg
[ 0%] Generating git_init_mavlink_include_mavlink_v1.0.stamp
[ 0%] Generating git_init_src_moles_uavcan_libuavcan.stamp
[ 0%] Generating git_init_Tools_genmsg.stamp
[ 0%] Generating git_init_Tools_gencpp.stamp
[ 0%] Built target git_uavcan
[ 0%] Built target git_mavlink
[ 0%] Built target git_genmsg
[ 0%] Built target git_gencpp
❺ 請教這段PHP代碼的源碼是什麼
你打開文件的格式是什麼格式。 這個程序原來編寫的格式又是什麼格式。砍亂碼沒人知道源碼是啥
❻ linux v4l2圖片採集問題
源碼中:
fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV;
fmt.fmt.pix.field = V4L2_FIELD_INTERLACED;
ioctl (fd, VIDIOC_S_FMT, &fmt);
指定了採集圖像的格式為YUYV格式。
要像採集成JPEG圖像,得查詢一下攝像頭是否有相應功能,如果沒有相應功旅知能即使拆虧消將fmt設置為jpeg最終採集到的還是yuyv格式。
yuyv可以轉換為bmp數據,然後調用jpeglib庫轉換為jpg圖像,稍稍有些麻煩,但沒辦法硬體不足就要用軟體來彌補了。
至於你說的read沒讀到數據,我現在沒有開發空攜環境,沒法測試。
❼ ffmpeg + cuda(cuvid) 硬解碼+像素格式轉換(cpu主導)實戰
cuvid 與 VDPAU 是平級的東西,不能拿來直接使用,使用成本太大
note:
note
Note: For Video Codec SDK 7.0 and later, NVCUVID has been renamed to NVDECODE API.
這是我第一次使用的方式,模仿 cpu 上軟解碼(獲取視頻幀,並存儲為bmp格式,經驗原則,這種方式最容易想到)
運行結果:
失敗,bad src img pointers
運行灶首結果如下圖所示:
問察辯孝題原因:
gpu 不支持 sws_scale + AV_PIX_FMT_CUDA-> AV_PIX_FMT_BGR24 的直接像素轉換方式,那麼 能否直接在gpu中直接轉化 AV_PIX_FMT_CUDA 為 AV_PIX_FMT_BGR24呢?
如果可以直接實現,性能會有很大提升,因為減少了device->host 的數據傳輸,且gpu多核心並行處理,肯定比cpu處理性能要強悍。
運行結果:
失敗,像素沒對齊,只有亮度
運行結果如下圖所示:
![預先設置內存中frame目標像素格式為 AV_PIX_FMT_BGR24]
問題原因:
如下圖所示:
所以gdb了下源碼,發現src->frame->format 轉換為 dst->frame->format 的受限范圍很小,然後找出了 av_hwframe_transfer_get_formats 支持的formats,
調試過程如下所示:
gdb -tui hw_decode_cuvid (-tui 支持查看源碼)
在調用 av_hwframe_transfer_data() 函數處打上斷點,且設置程序運行所需參數
run 程序,step 進入函數調用棧
n 單步運行,函數調用至 transfer_data_alloc()
發現 av_hwframe_transfer_get_formats()函數敗稿
更改 dst->format 的值為<0的值,並列印支持的像素轉換列表
可以看到只支持 gpu 硬體像素編碼格式->AV_PIX_FMT_NV12 的轉換
運行結果:
成功,如下圖所示:
❽ qt creator 怎麼編輯pix飛控源碼
檢測下是不是和系統中其掘核他軟體的熱鍵發生沖突用屏幕鍵盤(windows)試指散升試好不好用,看是否唯老是鍵盤問題
❾ 如何將lcd驅動移植到linux內核中
本移植主要參考友善之臂移植手冊完成,做個筆記以備不時之需
Linux-2.6.32 內核LCD驅動移植
使用環境:fedora9
交叉編譯工具鏈:arm-linux-gcc-4.4.3
內核源碼來源:https://www.kernel.org/pub/linux/kernel/v2.6/
內核存放目錄:/opt/mymini2440/linux-2.6.32
一、LCD背光碟機動移植
在、opt/mymini2440/linux-2.6.32/drivers/video/目錄下添加背光碟機動程序mini2440_backlight.c,內容如下:
//以下頭文件可能並不是每一個都必須的,但多餘的並不會影響驅動程序的內容
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/mole.h>
#include <linux/slab.h>
#include <linux/input.h>
#include <linux/init.h>
#include <linux/serio.h>
#include <linux/delay.h>
#include <linux/clk.h>
#include <linux/miscdevice.h>
#include <linux/gpio.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/uaccess.h>
#include <mach/regs-clock.h>
#include <plat/regs-timer.h>
#include <mach/regs-gpio.h>
#include <linux/cdev.h>
#undef DEBUG
//#define DEBUG
#ifdef DEBUG
#define DPRINTK(x...) {printk(__FUNCTION__"(%d): ",__LINE__);printk(##x);}
#else
#define DPRINTK(x...) (void)(0)
#endif
//定義背光碟機動的名稱為backligh,將會出現在/dev/backlight
#define DEVICE_NAME "backlight"
//定義背光變數bl_state,以記錄背光的開關狀態
static unsigned int bl_state;
//設置背光開關的函數,主要是翻轉背光變數bl_state
static inline void set_bl(int state)
{
bl_state = !!state; //翻轉bl_state 變數
s3c2410_gpio_setpin(S3C2410_GPG(4), bl_state); //把結果寫入背光所用的寄存器GPG4
}
//獲取背光狀態
static inline unsigned int get_bl(void)
{
return bl_state;
}
//從應用程序讀取參數,並傳遞到內核中
static ssize_t dev_write(struct file *file, const char *buffer, size_t count, loff_t * ppos)
{
unsigned char ch;
int ret;
if (count == 0) {
return count;
}
//使用_from_user 函數從用戶層/應用層讀取參數
ret = _from_user(&ch, buffer, sizeof ch) ? -EFAULT : 0;
if (ret) {
return ret;
}
ch &= 0x01; //判斷奇數還是偶數
set_bl(ch); //設置背光狀態
return count;
}
//把內核參數傳遞給用戶層/應用層的讀函數
static ssize_t dev_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)
{
int ret;
unsigned char str[] = {'0', '1' };
if (count == 0) {
return 0;
}
//使用_to_user 函數把內核參數傳遞到用戶層/應用層
ret = _to_user(buffer, str + get_bl(), sizeof(unsigned char) ) ? -EFAULT : 0;
if (ret) {
return ret;
}
return sizeof(unsigned char);
}
//設備操作集
static struct file_operations dev_fops = {
owner: THIS_MODULE,
read:dev_read,
write: dev_write,
};
static struct miscdevice misc = {
.minor = MISC_DYNAMIC_MINOR,
.name = DEVICE_NAME,
.fops = &dev_fops,
};
//設備初始化,內核啟動時就有效
static int __init dev_init(void)
{
int ret;
ret = misc_register(&misc);
printk (DEVICE_NAME"\tinitialized\n");
//初始化背光所用的埠GPG4 為輸出
s3c2410_gpio_cfgpin(S3C2410_GPG(4), S3C2410_GPIO_OUTPUT);
//啟動內核時打開背光
set_bl(1);
return ret;
}
static void __exit dev_exit(void)
{
misc_deregister(&misc);
}
mole_init(dev_init); //注冊背光碟機動模塊
mole_exit(dev_exit); //卸載背光碟機動模塊
MODULE_LICENSE("GPL");
MODULE_AUTHOR("FriendlyARM Inc.");
在/opt/mymini2440/linux-2.6.32/drivers/video/目錄項的菜單文件Kconfig中添加LCD背光碟機動配置菜單如下:
config FB_S3C2410_DEBUG
bool "S3C2410 lcd debug messages"
depends on FB_S3C2410
help
Turn on debugging messages. Note that you can set/unset at run time
through sysfs
config BACKLIGHT_MINI2440
tristate "Backlight support for mini2440 from FriendlyARM"
depends on MACH_MINI2440 && FB_S3C2410
help
backlight driver for MINI2440 from FriendlyARM
config FB_SM501
tristate "Silicon Motion SM501 framebuffer support"
在/opt/mymini2440/linux-2.6.32/drivers/video/Makefile中添加背光碟機動目標文件
# the test framebuffer is last
obj-$(CONFIG_FB_VIRTUAL) += vfb.o
#video output switch sysfs driver
obj-$(CONFIG_VIDEO_OUTPUT_CONTROL) += output.o
obj-$(CONFIG_BACKLIGHT_MINI2440) += mini2440_backlight.o
配置內核:
Device Drivers ---> Graphics support ---> <*> Support for frame buffer devices
---> <*> Backlight support for mini2440 from FriendlyARM
背光碟機動移植完畢!
二、LCD驅動移植
在內核中添加各種LCD 類型的支持(我是X35的屏,也是我只需關注的部分,不過還是都添加了,X35有紅色標出)
刪除mach-mini2440.c原有代碼(本人115行-158行)
162
163 //LCD2VGA(解析度為1024x768)模塊的配置和參數設置
164 #elif defined(CONFIG_FB_S3C2410_VGA1024768)
165 #define LCD_WIDTH 1024
166 #define LCD_HEIGHT 768
167 #define LCD_PIXCLOCK 80000
168 #define LCD_RIGHT_MARGIN 15
169 #define LCD_LEFT_MARGIN 199
170 #define LCD_HSYNC_LEN 15
171 #define LCD_UPPER_MARGIN 1
172 #define LCD_LOWER_MARGIN 1
173 #define LCD_VSYNC_LEN 1
174 #define LCD_CON5 (S3C2410_LCDCON5_FRM565 | S3C2410_LCDCON5_HWSWP)
175
176 #elif defined(CONFIG_FB_S3C2410_X240320)
177 #define LCD_WIDTH 240
178 #define LCD_HEIGHT 320
179 #define LCD_PIXCLOCK 170000
180 #define LCD_RIGHT_MARGIN 25
181 #define LCD_LEFT_MARGIN 0
182 #define LCD_HSYNC_LEN 4
183 #define LCD_UPPER_MARGIN 0
184 #define LCD_LOWER_MARGIN 4
185 #define LCD_VSYNC_LEN 9
186 #define LCD_CON5 (S3C2410_LCDCON5_FRM565 | S3C2410_LCDCON5_INVVDEN | S3C2410_LCDCON5_INVVFRAME | S3C2410_LCDCON5_INVVLINE | S3C2410_LCDCON5_INVVCLK | S3C2410_LCDCON5_HWSWP )
187 #endif
188
189 #if defined (LCD_WIDTH)
190
191 static struct s3c2410fb_display mini2440_lcd_cfg __initdata = {
192 #if !defined (LCD_CON5)
193 .lcdcon5 = S3C2410_LCDCON5_FRM565 |
194 S3C2410_LCDCON5_INVVLINE |
195 S3C2410_LCDCON5_INVVFRAME |
196 S3C2410_LCDCON5_PWREN |
197 S3C2410_LCDCON5_HWSWP,
198 #else
199 .lcdcon5 = LCD_CON5,
200 #endif
201 .type = S3C2410_LCDCON1_TFT,
202 .width = LCD_WIDTH,
203 .height = LCD_HEIGHT,
204 .pixclock = LCD_PIXCLOCK,
205 .xres = LCD_WIDTH,
206 .yres = LCD_HEIGHT,
207 .bpp = 16,
208 .left_margin = LCD_LEFT_MARGIN + 1,
209 .right_margin = LCD_RIGHT_MARGIN + 1,
210 .hsync_len = LCD_HSYNC_LEN + 1,
211 .upper_margin = LCD_UPPER_MARGIN + 1,
212 .lower_margin = LCD_LOWER_MARGIN + 1,
213 .vsync_len = LCD_VSYNC_LEN + 1,
214 };
215
216 static struct s3c2410fb_mach_info mini2440_fb_info __initdata = {
217 .displays = &mini2440_lcd_cfg,
218 .num_displays = 1,
219 .default_display = 0,
220 .gpccon = 0xaa955699,
221 .gpccon_mask = 0xffc003cc,
222 .gpcup = 0x0000ffff,
223 .gpcup_mask = 0xffffffff,
224 .gpdcon = 0xaa95aaa1,
225 .gpdcon_mask = 0xffc0fff0,
226 .gpp = 0x0000faff,
227 .gpp_mask = 0xffffffff,
228 .lpcsel = 0xf82,
229 };
230
231 #endif
232
然後打開drivers/video/Kconfig,在大概1935 行加入以下配置信息:
1923 config FB_S3C2410_DEBUG
1924 bool "S3C2410 lcd debug messages"
1925 depends on FB_S3C2410
1926 help
1927 Turn on debugging messages. Note that you can set/unset at run time
1928 through sysfs
1929
1930 choice
1931 prompt "LCD select"
1932 depends on FB_S3C2410
1933 help
1934 S3C24x0 LCD size select
1935
1936 config FB_S3C2410_T240320
1937 boolean "3.5 inch 240X320 Toppoly LCD"
1938 depends on FB_S3C2410
1939 help
1940 3.5 inch 240X320 Toppoly LCD
1941
1942 config FB_S3C2410_N240320
1943 boolean "3.5 inch 240X320 NEC LCD"
1944 depends on FB_S3C2410
1945 help
1946 3.5 inch 240x320 NEC LCD
1947
1948 config FB_S3C2410_TFT640480
1949 boolean "8 inch 640X480 L80 LCD"
1950 depends on FB_S3C2410
1951 help
1952 8 inch 640X480 LCD
1953
1954 config FB_S3C2410_TFT800480
1955 boolean "7 inch 800x480 TFT LCD"
1956 depends on FB_S3C2410
1957 help
1958 7 inch 800x480 TFT LCD
1959
1960 config FB_S3C2410_VGA1024768
1961 boolean "VGA 1024x768"
1962 depends on FB_S3C2410
1963 help
1964 VGA 1024x768
1965
1966 config FB_S3C2410_X240320
1967 boolean "3.5 inch 240X320 LCD(ACX502BMU)"
1968 depends on FB_S3C2410
1969 help
1970 3.5 inch 240X320 LCD(ACX502BMU)
1971
1972 endchoice
1973
1974 config BACKLIGHT_MINI2440
配置內核
Device Drivers ---> Graphics support ---> <*> Support for frame buffer devices ---> LCD select (3.5 inch 240X320 LCD(ACX502BMU)) ---> (X) 3.5 inch 240X320 LCD(ACX502BMU)
LCD驅動移植完成!!!
三、開機logo和開機信息顯示
Device Drivers ---> Graphics support ---> <*> Support for frame buffer devices ---> [*] Bootup logo ---> [*] Standard 16-color Linux logo (本人的24位死活不能顯示,先改成16位吧)
在文件系統rootfs/etc/inittab下作如下修改(為了在LCD上顯示列印信息):
1 ::sysinit:/etc/init.d/rcS
2 tty1::askfirst:-/bin/sh //添加
3 s3c2410_serial0::askfirst:-/bin/sh
4 ::ctrlaltdel:/sbin/reboot
5 ::shutdown:/bin/umount -a -r
6
四,編譯測試
#make zImage
#cd arch/arm/boot/
#mkimage -n 'mini2440_linux' -A arm -O linux -T kernel -C none -a 0x31000000 -e 0x31000040 -d zImage uImage
#chmod a+x uImage
#cp uImage /tftp/boot
設置U-BOOT參數如下: