我正在尝试使用https://github.com/bq/edison-2中的内核源和http://www.haoyuelectronics.com/service/RK3066/tools/linux/中的工具链(gcc 4.6)来使用我的rk3066设备。但设备(rk3066平板电脑 - Tracer OVO 2.0)无法启动内核恐慌消息,如标题中所述。我也注意到它是由rk30_lcdc.c中的行引起的:
static irqreturn_t rk30_lcdc_isr(int irq, void *dev_id)
{
struct rk30_lcdc_device *lcdc_dev = (struct rk30_lcdc_device *)dev_id;
ktime_t timestamp = ktime_get();
lcdc_msk_reg(lcdc_dev, INT_STATUS, m_FRM_START_INT_CLEAR, v_FRM_START_INT_CLEAR(1));
//lcdc_cfg_done(lcdc_dev);
//lcdc_msk_reg(lcdc_dev, INT_STATUS, m_LINE_FLAG_INT_CLEAR, v_LINE_FLAG_INT_CLEAR(1));
if(lcdc_dev->driver.num_buf < 3) //three buffer ,no need to wait for sync
{
spin_lock(&(lcdc_dev->driver.cpl_lock));
complete(&(lcdc_dev->driver.frame_done));
spin_unlock(&(lcdc_dev->driver.cpl_lock));
}
lcdc_dev->driver.vsync_info.timestamp = timestamp;
wake_up_interruptible_all(&lcdc_dev->driver.vsync_info.wait); //THIS LINE CAUSES KERNEL PANIC
return IRQ_HANDLED;
}
rk30_lcdc_device类型:
struct rk30_lcdc_device{
int id;
struct rk_lcdc_device_driver driver;
rk_screen *screen;
//LCDC_REG *preg; // LCDC reg base address and backup reg
//LCDC_REG regbak;
void __iomem *regs;
void *regsbak; //back up reg
int __iomem *dsp_lut_addr_base;
void __iomem *reg_vir_base; // virtual basic address of lcdc register
u32 reg_phy_base; // physical basic address of lcdc register
u32 len; // physical map length of lcdc register
spinlock_t reg_lock; //one time only one process allowed to config the register
bool clk_on; //if aclk or hclk is closed ,acess to register is not allowed
u8 atv_layer_cnt; //active layer counter,when atv_layer_cnt = 0,disable lcdc
unsigned int irq;
struct clk *pd; //lcdc power domain
struct clk *hclk; //lcdc AHP clk
struct clk *dclk; //lcdc dclk
struct clk *aclk; //lcdc share memory frequency
struct clk *aclk_parent; //lcdc aclk divider frequency source
struct clk *aclk_ddr_lcdc; //DDR LCDC AXI clock disable.
struct clk *aclk_disp_matrix; //DISPLAY matrix AXI clock disable.
struct clk *hclk_cpu_display; //CPU DISPLAY AHB bus clock disable.
struct clk *pd_display; // display power domain
u32 pixclock;
};
rk_lcdc_device_driver类型:
struct rk_fb_vsync vsync_info;
/* Cut here */
rk_fb_vsync类型:
struct rk_fb_vsync {
wait_queue_head_t wait;
ktime_t timestamp;
bool active;
bool irq_stop;
int irq_refcount;
struct mutex irq_lock;
struct task_struct *thread;
};
我尝试过评论(buggy?)行,但是在结果屏幕中,在内置屏幕上没有显示控制台模式的文本(没有Xserver)。如何解决这个或从哪里开始寻找解决方案?
致以最诚挚的问候,
Tomasz Jeruzalski