要起兵必须扩大兵力,李渊为太原留守,虽握有重兵,仍需招募一支自己的队伍,可公开招募会引起高君雅、王威的注意。正在李渊、李世民为难的时候,马邑人刘武周杀死了马邑太守王仁恭,占据马邑郡,起兵反隋,且自称皇帝,还勾引突厥直驱太原。于是,李渊以讨伐刘武周为托词,召集各位将领商议,提出自己招募兵丁,高君雅和王威迫于当时的形势,只好同意。于是,李渊命李世民与刘文静、长孙顺德、刘弘基、窦琮等人去招募士兵。不多久,便募兵近万人。李渊父子大量募兵,毕竟无法完全掩盖其真实的想法,况且其所用将领长孙顺德、刘弘基是为了逃避征辽诏令而逃到太原的,而窦琮也是逃犯。高君雅、王威见此,怀疑李渊有谋反之心,于是就暗中策划利用到晋祠祈雨的机会,将李渊父子诱骗来全部杀死。不料此事被经常出入王、高家的刘文龙得知,刘文龙立刻将此事报告给李渊,李渊于是决定先发制人。
公元617年初夏的一天夜里,李渊命令长孙顺德、赵文恪等人带领五百壮士,和李世民的精兵一起埋伏于晋阳宫城外。第二天清晨,李渊与高君雅、王威在留守府大厅议事,按照计划,以王、高暗引突厥入侵为由,将其逮捕入狱。事也凑巧,第二天果然有突厥数万人进攻晋阳,民众以为是王、高所致,于是李渊趁机杀掉高君雅、王威。这标志着李渊父子正式开始晋阳起兵。
晋阳起兵后,李渊父子的目标就是乘虚入关,直取长安,以号令天下,建立新的王朝。
在长安(今陕西西安)的统治者听说李渊带兵进攻,忙派大将宋老生和屈突通分别领兵数万,在霍邑与河东抵抗李渊大军。大业十三年(617年)七月,李渊率军进攻宋老生驻守的霍邑,却逢秋雨连绵,无法开战,而且道路泥泞,军粮运输困难。但他听了李世民的意见,决定不撤兵。八月,连日的阴天终于放晴,李渊遂下令攻城,并由李世民率兵诱敌出城,双方展开决战。李世民身先士卒,奋勇冲锋,“砍杀数十人,两刀皆缺,流血满袖”。霍邑一战,李渊大获全胜,斩杀了隋将宋老生,攻下了霍邑。随后,李渊率兵进攻河东郡,虽取得初战的胜利,但是隋将屈突通固守河东郡,李渊久攻不下。后根据李世民建议,李渊留下部分兵力包围和牵制屈突通,自己率主力部队渡过黄河,直取长安。
同时,李渊在关中地区的家属和亲族也纷纷起兵响应,其中有世民的胞妹平阳公主、李渊的从弟李神通,李渊的女婿段纶也在蓝田县聚众万余人。在这种有利形势下,李渊父子一路上采取收揽人心的办法,废除了隋朝的严刑酷法,还开仓济贫。一面收编关中各地的起义军,一面争取关中地主阶级的支持。数月,李渊、李世民的军队已达二十万人,并于十月开始围攻长安。十一月,长安城破,李渊率军进入长安宫,立年仅十三岁的代王杨侑为帝,是为隋恭帝,并改元义宁,遥尊江都的隋炀帝为太上皇。李渊总揽军政大权,晋封为唐王。李建成为唐王世子,李世民为兆尹、秦公,李元吉为齐公。