Goal
Create a clean project workspace and capture the boardโs current boot baseline through the serial console.
Problem
This level looked simple at first:
- create folders
- initialize Git
- connect the serial cable
- save the boot log
But the real system was not simple.
This board is not in confirmed factory-default state.
Its serial output already contains traces from a previous project.
So I could not call this log a factory baseline.
I had to treat it as a current board baseline.
I also hit another problem:
my CH340 serial adapter was detected by Linux, but the serial port disappeared almost immediately.
Fix
Step 1: Build the project layout
I created a clean working structure:
mkdir -p ~/imx6ull-porting/{src,build,out,logs,docs}
cd ~/imx6ull-porting
git init
This keeps source code, build output, final output, logs, and documents separated.
Step 2: Record the board state first
Before trusting the serial output, I wrote down the truth:
the board is not in confirmed factory-default state
the current boot output contains traces from an older project
this log must be treated as a current board baseline
This matters because future debugging must compare against the real current state, not an imagined clean state.
Step 3: Find the serial trap
I checked lsusb and confirmed the CH340 adapter was detected.
But the kernel log showed the real problem:
ch341-uart converter now attached to ttyUSB0
usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1
ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
So the problem was not the cable.
It was brltty, a background accessibility service in Ubuntu.
It hijacked the CH340 device and disconnected it.
Step 4: Remove the conflicting service
I fixed it by removing brltty:
sudo apt remove brltty
After that, /dev/ttyUSB0 became stable.
Then I hit another issue:
Permission denied
This was not a driver problem.
It was a user permission problem.
My user was not yet effectively using the dialout group in the current shell session, so I used:
sudo picocom -b 115200 /dev/ttyUSB0
to keep the main workflow moving.
Step 5: Capture the current board baseline
With the serial console working, I rebooted the board and saved the output as:
logs/current_board_boot_baseline.log
The log showed important real facts:
U-Boot 2016.03
Board: I.MX6U ALPHA|MINI
DRAM: 512 MiB
Net: FEC1
It also showed that the board still had an old network boot path:
FEC1 Waiting for PHY auto negotiation to complete......... TIMEOUT !
TFTP from server 169.254.82.125
Filename 'zImage'
ARP Retry count exceeded; starting again
Filename 'imx6ull-alientek-emmc.dtb'
Bad Linux ARM zImage magic!
This means the board is currently trying to boot by TFTP, but the path is not working correctly.
Test
This level passes if:
- the project folders exist
- board_state.md exists
- current_board_boot_baseline.log exists
- the serial console works
- the current board state is clearly documented
Debug Log
- Issue 1: The CH340 device was detected, but /dev/ttyUSB0 was unstable
- Fix: Found that brltty hijacked the device, then removed it
- Issue 2: Normal user access gave Permission denied
- Fix: Used sudo picocom first, then planned to clean up permissions later
- Issue 3: The board was not in clean factory state
- Fix: Recorded that truth first, and saved the log as a current board baseline instead of a factory baseline
What I Learned
This level was not about code.
It was about discipline.
I learned two important things:
- Always record the real board state before trusting any boot log
- When serial devices behave strangely on Linux, check dmesg first
In low-level work, the real system state is always more important than assumptions.
United States
NORTH AMERICA
Related News
CBS News Shutters Radio Service After Nearly a Century
5h ago
White House Unveils National AI Policy Framework To Limit State Power
5h ago
Officer Leaks Location of French Aircraft Carrier With Strava Run
5h ago
Microsoft Says It Is Fixing Windows 11
5h ago
NASA's Hubble Unexpectedly Catches Comet Breaking Up
5h ago